Суммируйте атрибут CoreData - PullRequest
       4

Суммируйте атрибут CoreData

3 голосов
/ 23 января 2011

Я только начинаю программировать на iOS, поэтому большое спасибо за терпение и помощь заранее. У меня есть сущность "Расход" с атрибутом (с плавающей точкой), который называется "стоимость". У меня есть табличное представление заполненной формы coreData с NSFetchedResultsController. Я пытаюсь показать в метке (или в заголовке таблицы) общую сумму «значений» всех моих «расходов», но не могу реализовать решение после прочтения Apple Docs и поиска различных форумов. Наверняка дезориентация новичка. Примите во внимание любые указания о наилучшем способе реализации этого типа операций или любой код, который показывает подобное решение.

1 Ответ

8 голосов
/ 23 января 2011

в первую очередь.Вы должны использовать Decimal (имя основных данных для nsdecimalnumber) и NSDecimalNumber, если вы хотите вычислить и сохранить валюту.Я реализовал код, который вам нужен, с помощью float.Но вы должны действительно изменить его на NSDecimalNumber.Прочитайте это , чтобы узнать, почему вы должны это сделать

Если вы хотите добавить значение расхода в заголовок раздела, это легко.Вы берете на себя все расходы в разделе и суммируете их.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    float expense = 0;
    for (NSManagedObject *object in [sectionInfo objects]) {
        expense += [[object valueForKey:@"expense"] floatValue];
    }
    return [NSString stringWithFormat:@"%@ [Expense: %f]", [sectionInfo name], expense];
}

Даже если вы не используете разделы в своей таблице, это будет работать.Но тогда вам следует изменить возвращенную строку.

Я думаю, вы должны понимать это.Существует также более общий способ сделать это.Я написал это немного более многословно для вас.Он использует 3 строки вместо 1 в цикле for, но делает то же самое.

float expense = 0;
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
    NSNumber *objectExpenseNumber = [object valueForKey:@"expense"];
    float objectExpense = [objectExpenseNumber floatValue];
    expense = expense + objectExpense;
}
NSLog(@"Expense: %f", expense);

Не очень много объяснений.

edit: это будет код, если вы используете NSDecimalNumber

NSDecimalNumber *expense = [NSDecimalNumber decimalNumberWithString:@"0"];
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
    NSDecimalNumber *objectExpenseNumber = [object valueForKey:@"expense"];
    expense = [expense decimalNumberByAdding:objectExpenseNumber];
}
NSLog(@"Expense: %@", expense);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...