【问题标题】:NSDecimalNumber sumNSDecimalNumber 和
【发布时间】:2012-12-19 20:58:05
【问题描述】:

在我的 ios 项目中,我使用了两个实体 (CoreData):Person 和 Gifts with To-Many Relations

我知道如何计算给一个人的礼物总和:

NSDecimalNumber *orderSum=[person.gifts valueForKeyPath:@"@sum.priceOfGift"];

但是如何计算所有人的总和?

 -(NSFetchedResultsController *) fetchedResultsController {
if (_fetchedResultsController != nil) {
    return _fetchedResultsController;
}
//NSError *error = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person"
                                          inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"nameOfPerson"
                                                               ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];


_fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"nameOfGroup" cacheName:nil];

_fetchedResultsController.delegate = self;

return _fetchedResultsController;

}

【问题讨论】:

  • 获取所有的 pesrons
  • 你能举个简单的例子吗...?

标签: ios core-data sum key-value-coding nsdecimalnumber


【解决方案1】:

“所有人的总和”是获取所有人并计算他们

int sum = fetchedObjects.count;

但也许您的意思是“所有人所有礼物的价格总和”。仔细想想,这和所有礼物的价格总和是一样的。因此,您可以只取礼物并计算

NSNumber *sum = [self.fetchedResultsController.fetchedObjects 
      valueForKeyPath:@"@sum.priceOfGift"];

【讨论】:

  • 亲爱的 Mundi 感谢您的回复。请查看更新后的代码,我如何使用: NSNumber *sum = [fetchedObjects valueForKeyPath:@"@sum.priceOfGift"];谢谢
  • fetchedObjectsNSFetchedResultsController 的属性。见上文。
  • NSDecimalNumber *sum = [self.fetchedResultsController.fetchedObjects valueForKeyPath:@"@sum.priceOfGift"]; totalLabel.text = [currencyFormatter stringFromNumber:sum]; NSLog(@"%@ Sum", sum);在控制台中,我得到一个 (null) Sum
  • 继续调试。礼物的价格是NSNumber吗?没有拼写错误?仔细检查托管对象子类声明等。
  • 属性应该是 NSNumber 类型。在 .m 文件中,它应该是 @dynamic。您应该验证数据库中是否存在要求和的有效数字(例如通过 NSLog)。
【解决方案2】:

您可以尝试获取所有人员,然后使用总和

    NSError *error = nil;
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    request.entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
    request.predicate = nil;
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES]];//some parameter
    NSArray *persons =  [managedObjectContext executeFetchRequest:request error:&error];
 NSDecimalNumber *orderSum;
 for (Person *person in persons)
  orderSum = [NSDecimalNumber decimalNumberWithDecimal:orderSum.decimalValue
+[person valueForKeyPath:@"gifts.@sum.priceOfGift"].decimalValue]

不过,现在使用 NSDecimalNumber 看起来有点不舒服。

【讨论】:

  • 二进制表达式的无效操作数('NSDecimal' 和 'id')
  • 取十进制数值即可
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多