Сумма NSDecimalNumber

В моем проекте ios я использую два объекта (CoreData): Person и Gifts с отношением ко многим.

Я знаю, как рассчитать сумму подарков одному человеку:

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;

}


person German    schedule 19.12.2012    source источник
comment
Просто собери всех людей   -  person Nikita Pestrov    schedule 20.12.2012
comment
Можете ли вы привести простой пример...?   -  person German    schedule 20.12.2012


Ответы (2)


«Сумма всех людей» будет заключаться в том, чтобы получить всех людей и посчитать их.

int sum = fetchedObjects.count;

Но, возможно, вы имеете в виду «сумму цен всех даров всех людей». Если подумать, это то же самое, что сумма цен всех подарков. Таким образом, вы можете просто забрать подарки и рассчитать

NSNumber *sum = [self.fetchedResultsController.fetchedObjects 
      valueForKeyPath:@"@sum.priceOfGift"];
person Mundi    schedule 20.12.2012
comment
Уважаемый Мунди, спасибо за ваш ответ. Пожалуйста, взгляните на обновленный код, как я могу использовать: NSNumber *sum = [fetchedObjects valueForKeyPath:@@sum.priceOfGift]; Спасибо - person German; 20.12.2012
comment
fetchedObjects является собственностью NSFetchedResultsController. См. выше. - person Mundi; 20.12.2012
comment
NSDecimalNumber *sum = [self.fetchedResultsController.fetchedObjects valueForKeyPath:@@sum.priceOfGift]; totalLabel.text = [currencyFormatter stringFromNumber:sum]; NSLog(@%@ Сумма, сумма); В консоли я получаю (нулевую) сумму - person German; 20.12.2012
comment
Идите вперед и отлаживайте. Цена подарка NSNumber? Орфографических ошибок нет? Дважды проверьте объявления подклассов управляемых объектов и т. д. - person Mundi; 20.12.2012
comment
цена подарка - NSDecimalNumber. Нет орфографических ошибок. Извините, но что именно я должен проверить объявления подкласса управляемого объекта? - person German; 20.12.2012
comment
Атрибут должен иметь тип NSNumber. В файле .m это должно быть @dynamic. Вы должны убедиться, что в базе данных есть действительные числа для суммирования (например, через NSLog). - person Mundi; 20.12.2012
comment
давайте продолжим обсуждение в чате - person German; 20.12.2012

Вы можете попытаться получить всех лиц, а затем использовать сумму

    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:@"[email protected]"].decimalValue]

Правда, теперь работа с NSDecimalNumber выглядит несколько неудобно.

person Nikita Pestrov    schedule 19.12.2012
comment
Недопустимые операнды для двоичного выражения ("NSDecimal" и "id") - person German; 20.12.2012
comment
Просто возьмите десятичное значение - person Nikita Pestrov; 20.12.2012