Здравствуйте, я хочу иметь возможность суммировать атрибут (rowTotal) в моей базе данных CoreData после того, как он был отфильтрован предикатом, который я установил в контроллере полученных результатов.Тогда результатом будет промежуточный итог для заказа.
Сначала я думал, что смогу как-то просто суммировать значения, которые отображаются в tableCells, но я прочитал, что это не работает, так как может быть только 10tableCells для 100 элементов.
Я прочитал аналогичный вопрос (ссылка ниже), который относится к размещению суммы в заголовке раздела.Мне нужен вариант, в соответствии с которым я хочу, чтобы сумма отображалась и обновлялась до UILabel после любых изменений в managedObjectContext.
Сумма атрибута CoreData
Я пыталсяследующий код:
float subtotal = 0;
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
NSNumber *objectRowTotalNumber = [object valueForKey:@"rowTotal"];
float objectRowTotal = [objectRowTotalNumber floatValue];
subtotal = subtotal + objectRowTotal;
}
NSLog(@"Subtotal: %f", subtotal);
Я пробовал его в нескольких местах в моем коде, чтобы посмотреть, смогу ли я заставить его работать.У меня не было успеха, и данные не отображаются в tableView с этим кодом.Я думаю, что следующая строка вызывает у меня горе.
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects])
Я чувствую, что на самом деле создается новый управляемый объект и мешает тому, который у меня на месте.
Здеськод для моего выбранного контроллера результатов
- (NSFetchedResultsController *)fetchedResultsController {
NSLog(@"I'm inside the method fetchedResultsController");
/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
OrderAppDelegate *appDelegate =
(OrderAppDelegate*) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Order" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Set the Predicate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orderNumber == %@", orderNumberLabel.text];
NSLog(@"predicate is: %@",predicate);
[fetchRequest setPredicate:predicate];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
}
Использую ли я правильный код для этого приложения?ты видишь что я делаю не так?Где я должен реализовывать код?
Любое руководство будет высоко ценится, спасибо.