在Xcode 5中:(我正在使用5.1.1)
Delta
。 (注意:这些名称很重要,您很快就会看到。)fetchedResultsController
方法中:改变这个:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
对此:
NSString *entityName = [@"E" stringByAppendingString:@"vent"];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext];
现在在 iPhone Retina(4英寸64位)模拟器上运行应用程序。
您将收到以下错误消息:
***因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'executeFetchRequest:error:获取请求必须有实体。'
原因是因为entityForName:inManagedObjectContext:
正在返回nil。
知道为什么会这样吗?
如果在entityName
设置后立即在行上放置断点,您将看到其值和类型为:
entityName __ NSCFString * @“事件”
如果更改将entityName分配给的行:
NSString *entityName = @"Event";
然后它的类型变为:
entityName __ NSCFConstantString * @“事件”
现在将正确填充entity
,应用程序不会崩溃。
将Delta
重命名为Foxtrot
并运行原始代码。变量entityName
仍为__NSCFString
,但此次entityForName:inManagedObjectContext:
将返回有效值。
如果将模拟器更改为32位设备,原始代码将正常工作。