我有一些核心数据对象在某种程度上是无效的问题。 托管对象上下文位于应用程序委托中,我在视图表中使用它从数据库中提取“笔记”对象并显示它们。 我建立区段(今天,昨天等)的阵列,并且对于每个部分中这样的部分与笔记的数组:核心数据对象被无效
// in the .h file
NSMutableArray* data; // An array containing an array of thoughts for each section.
@property (nonatomic, retain, readonly) NSManagedObjectContext* objectContext;
// in the .m file, when loading the view
ThoughtsAppDelegate* appDelegate = (ThoughtsAppDelegate*)[[UIApplication sharedApplication] delegate];
objectContext = appDelegate.managedObjectContext;
NSEntityDescription* descriptor = [[NSEntityDescription entityForName:@"Note"
inManagedObjectContext:objectContext] autorelease];
NSFetchRequest* request = [[NSFetchRequest alloc] init];
[request setEntity:descriptor];
NSError* error;
NSArray* notes = [objectContext executeFetchRequest:request error:&error];
// example for one section
data = [[NSMutableArray alloc] init];
NSMutableArray* ccurrentSection = [[NSMutableArray alloc] init];
[data addObject:currentSection];
for(Note* t in notes)
[currentSection addObject:t];
当视图加载第5个音符被显示(在休息不适合在视图中),一切正常。但是,当我向下滚动以查看下一个注释时,我得到一个
NSObjectInaccessibleException带ID的NSManagedObject已失效。
这发生在数组中的所有对象。
这怎么可能?我检查并且不重置/释放上下文。或者是否存储核心数据对象并在稍后再引用它?
编辑:这似乎也发生,如果我不滚动,并希望显示关于一个笔记的细节,当它被选中。似乎只要显示第一个音符,它们就会失效。
您是否需要保留managedObjectContext或者是否在应用程序内部执行deleagate - 如果您的托管对象上下文消失,可能会导致此错误。 – deanWombourne 2010-12-10 12:31:36
在应用程序委托中,我有由Xcode自动创建的属性:@property(nonatomic,retain,readonly)NSManagedObjectContext * managedObjectContext;所以应该保留。我不会在任何地方发布它,而且我也不会更改数据库。 – 2010-12-10 12:42:44