初始 CoreData 对象的类型错误。
Posted
技术标签:
【中文标题】初始 CoreData 对象的类型错误。【英文标题】:Initial CoreData object is of the wrong type. 【发布时间】:2012-02-10 19:23:21 【问题描述】:创建一个初始对象,将其插入到 ManagedObjectContext 中,并保存上下文。然后将此对象设置为管理 CoreData 堆栈的单例类的属性。
这个原始对象,当从另一个类引用时,是错误的类型(NSCFString)。另一方面,如果对象被获取,那么它就是正确的类并且可以正常工作。
NSArray *pdaSetupRecords = [results fetchedObjects];
//If this is the initial launch of the application, create
//a PDASetup object and save the context, otherwise set
//pdaSetup to the fetched instance.
if ([pdaSetupRecords count] < 1)
PDASetup *newPdaSetup = (PDASetup *) [NSEntityDescription insertNewObjectForEntityForName:@"PDASetup" inManagedObjectContext:managedObjectContext];
[self saveContext];
pdaSetup = newPdaSetup;
NSLog(@"SystemUtility - PDASetup object created and saved.");
else
pdaSetup = [pdaSetupRecords objectAtIndex:0];
如您所见,将只有一个 PDASetup 对象。在创建 PDASetup 对象时会出现此问题。如果我重新运行应用程序并获取 PDASetup 对象,一切都很好。
有什么想法吗?
【问题讨论】:
【参考方案1】:你的意思是写:
pdaSetup = [newPdaSetup retain];
或
self.pdaSetup = newPdaSetup; //with a retained @property
您的应用程序是否崩溃并告诉您类型是 NSCFString?可能内存地址被字符串覆盖了。
【讨论】:
你是对的,设置 self.pdaSetup 纠正了问题,其他建议也是如此。我没有意识到设置 self.* 会有所作为。 我喜欢当我从猜测中正确的时候......你需要再次阅读内存管理规则并使用@properties。 self.* 调用变量的属性访问器/修改器,如果您在属性上使用“保留”,则保留该变量。或者...开始使用 ARC。 不确定我的问题是否可以通过重新阅读内存管理规则来解决,我只是没有意识到不调用综合会导致未保留的值。当我阅读您的答案时,我基本上跳到了 2 个版本的定义,看到一个转到了头文件!以上是关于初始 CoreData 对象的类型错误。的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 中看似有效的对象出现“悬空引用无效对象”错误
在 iOS 中对来自 Core Data 的实体的 NSArray 进行快速枚举时出现运行时错误
RestKit 对象映射 POST 响应,“CoreData:错误:在 NSManagedObject 类映射操作上调用指定初始化程序失败”