我有一些核心數據對象在某種程度上是無效的問題。 託管對象上下文位於應用程序委託中,我在視圖表中使用它從數據庫中提取「筆記」對象並顯示它們。 我建立區段(今天,昨天等)的陣列,並且對於每個部分中這樣的部分與筆記的數組:核心數據對象被無效
// 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