2010-08-27 102 views
2

我有一個文件和設置模型之間的一對一關係:核心數據關係無法加載對一的關係

alt text

在建立一個文件時,相應的設置對象被創建。模型堅持核心數據。

當創建幾個文件(及關聯設置)後重新推出,應用程序重新加載的文件清單使用來選擇:

// Load delegate from shared application and context from delegate. 
SampleAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = delegate.managedObjectContext; 

// Create new request. 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

// Create entity description using delegate object context. 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:context]; 

// Set entity for request. 
[request setEntity:entity]; 

// Load array of documents. 
NSError *error; 
NSArray *documents = [context executeFetchRequest:request error:&error]; 

// Rlease descriptor. 
[descriptor release]; 

// Release request. 
[request release]; 

// Done. 
return documents; 

列表顯示正常(文件加載)。但是,當試圖訪問程序退出給出的任何文檔的設置時:

程序接收信號:「SIGABRT」。

當用戶選擇一個按鈕時,觸發設置的修改。奇怪的是,該程序不會崩潰,如果添加下面的代碼片段只是退回單據上加載之前(即如果關係訪問,同時加載):

for (Document *document in documents) 
{ 
    NSLog(@"document.name: %@", document.name); 
    NSLog(@"document.settings.stroke: %@", document.settings.stroke); 
    NSLog(@"document.settings.stroke: %@", document.settings.stroke); 
} 

的關係的性質是「(非原子,保留)「並使用」@dynamic「。有任何想法嗎?謝謝!

+0

你有殭屍跑嗎?代碼看起來很好,我懷疑存在某種內存管理問題。 – 2010-08-27 22:03:06

+0

@martin,我不太熟悉XCode性能工具,但是當我選擇「運行>使用性能工具運行」時,殭屍顯示爲灰色。我需要做什麼才能使用它?謝謝。 – 2010-08-27 22:12:18

+0

NSZombie啓用描述在這裏:http://stackoverflow.com/questions/1211923/how-to-use-nszombie-in-xcode – NWCoder 2010-08-27 22:59:47

回答

0

在花費太多時間在這個bug後,我終於明白了。在這些值的初始加載過程中,我設置了一個KVO。此代碼是導致崩潰的崩潰(雖然他們沒有出現,直到下一次運行循環):

[self.document.settings addObserver:self forKeyPath:@"fill" options:0 context:NULL]; 
[self.document.settings addObserver:self forKeyPath:@"stroke" options:0 context:NULL]; 

不知道爲什麼這是一個問題,但我很幸運,能夠簡單地刪除它了。

0

在您的核心數據模型中,您是否在文檔&設置之間建立了反比關係?如果沒有,你必須。

+0

是的,我確實設置了它。 – 2010-08-29 05:28:43