我正试图在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方法中使用获取的结果控制器?
答案 0 :(得分:1)
在Apple示例中使用fetchedResultsConstroller的目的是获取实体类型。我看到的明显好处是保证了插件的类型安全性。而在您的重新分解版本中,您需要对实体类型进行硬编码。
虽然如果您要将实体名称更改为Event2,这不是什么大问题,但您必须更改硬编码的NSString(@“Event”)。