2010-12-10 57 views
1

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

// 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已失效。

這發生在數組中的所有對象。

這怎麼可能?我檢查並且不重置/釋放上下文。或者是否存儲核心數據對象並在稍後再引用它?

編輯:這似乎也發生,如果我不滾動,並希望顯示關於一個筆記的細節,當它被選中。似乎只要顯示第一個音符,它們就會失效。

+0

您是否需要保留managedObjectContext或者是否在應用程序內部執行deleagate - 如果您的託管對象上下文消失,可能會導致此錯誤。 – deanWombourne 2010-12-10 12:31:36

+0

在應用程序委託中,我有由Xcode自動創建的屬性:@property(nonatomic,retain,readonly)NSManagedObjectContext * managedObjectContext;所以應該保留。我不會在任何地方發佈它,而且我也不會更改數據庫。 – 2010-12-10 12:42:44

回答

1

它似乎與管理筆記對象的方式有關,但執行此操作的代碼不在您的示例中。 notes數組是一個autorelease數組,所以除非你保留它的某個地方,它可能會在你加載下一節之前釋放。

+0

A「音符」被添加到「部分的」陣列,以及「部分」數組」被添加到‘數據’陣列(其被保留)...的說明不應該被保留,然後? – 2010-12-10 12:54:36

+0

抱歉。錯過了:-) – drekka 2010-12-10 13:01:22

+0

這段代碼何時執行? – drekka 2010-12-10 13:02:34