在不使用表视图的情况下更新核心数据属性

时间:2014-01-16 15:11:53

标签: ios core-data getter-setter

我有一个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)

2 个答案:

答案 0 :(得分:4)

我认为在这种情况下你不应该使用NSFetchedResultsController。如果您不想在UITableViewUICollectionView中使用它,那么没有它可能会更好。你可能更喜欢使用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:返回给定对象的索引路径,然后进行更新。