我有一个POS类型的应用程序,它使用Core Data来使用表格视图存储每日销售交易。我试图检索和更新某些核心日期属性,如每日销售计数,不使用表格视图。表视图使用索引路径处的行指向正确的对象(行)。我使用带有谓词的Fetched Results控制器来检索获取的对象(行)问题:如何获取获取的行的索引以便我可以检索然后更新正确的属性值?所有书籍和示例都使用表格视图来更改属性。
Entity Product
Product *product;
______________________________
[self setupFetchedResultsController]; (This returns one object)
product = [NSFetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; (objectAtIndexPath - Errors of course)
答案 0 :(得分:4)
我认为在这种情况下你不应该使用NSFetchedResultsController
。如果您不想在UITableView
或UICollectionView
中使用它,那么没有它可能会更好。你可能更喜欢使用NSFetchRequest
,它很容易设置:
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"someValue=1"];
fetchRequest.predicate = predicate;
NSError *error = nil;
NSArray *array = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
现在你有一个NSArray
包含所有结果,你可以使用它而无需处理索引路径。
如果您仍在使用NSFetchedResultController
作为表格(我不确定您是否这样做),那么每当您进行更改时,这些行仍会更新。
更新:要更新fetch返回的其中一个对象,可以这样做:
Entity *entity = [array firstObject];
[entity setSomeProperty:@"CoreDataIsAwesome"];
NSError *error = nil;
if ([self.managedObjectContext save:&error]) {
NSLog(@"Entity updated!");
} else {
NSLog(@"Something went wrong: %@", error);
}
答案 1 :(得分:1)
您可以在获取的结果控制器上使用方法indexPathOfObject:
返回给定对象的索引路径,然后进行更新。