为什么在插入Core Data对象时使用NSFetchedResultsController?

时间:2010-04-12 10:59:40

标签: iphone objective-c

我正试图在iphone上了解核心数据。

这是来自Apple的“基于导航的应用程序使用核心数据”模板(方法 - insertNewObject)的代码

// Create a new instance of the entity managed by the fetched results controller.
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[fetchedResultsController fetchRequest] entity];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

对我来说,在插入新对象时使用获取的结果控制器似乎完全违反直觉。

我将代码更改为:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] 
                                                                  inManagedObjectContext:managedObjectContext];

也可以正常工作,不需要访问获取请求。

我在这里遗漏了什么吗?有没有什么好的理由在insert方法中使用获取的结果控制器?

1 个答案:

答案 0 :(得分:1)

在Apple示例中使用fetchedResultsConstroller的目的是获取实体类型。我看到的明显好处是保证了插件的类型安全性。而在您的重新分解版本中,您需要对实体类型进行硬编码。

虽然如果您要将实体名称更改为Event2,这不是什么大问题,但您必须更改硬编码的NSString(@“Event”)。