Как насчет KVC?

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

Ответы на вопрос(1)

Решение Вопроса

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);

Не очень много, чтобы объяснить.

редактировать: это будет код, если вы используете 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);
 highmaintenance05 апр. 2015 г., 22:09
Как насчет KVC?
 Diogo24 янв. 2011 г., 16:44
Спасибо fluchtpunkt, я работал над вашим кодом, пытаясь понять его, а не просто «вставить». Это работает, как хотелось бы.
 Diogo23 янв. 2011 г., 20:07
Спасибо за то, что уделили время «fluchtpunkt» и указали способ работы с валютами. Хорошие советы всегда приветствуются и принимаются. Моей главной проблемой был способ вычисления @Sum «значения» для всех расходов, которые пользователь может вставить в TableView и сохранить как сущность «Расход» с атрибутом «значение» или «сумма», точнее. Я не нашел способ рассчитать общую сумму атрибута с CoreData. Затем я бы показал, что "Общая сумма" где-то. Спасибо

Ваш ответ на вопрос