2

似乎有一些關於在基於文檔的應用程序中使用Core-data的信息。我有一個窗口控制器在當前文檔中運行模式窗口。用戶將數據輸入到文本字段中,該字段創建一個可變的字符串數組,我想用它來創建模型對象(用於多對多關係),然後將它們保存到核心數據堆棧中。這是我在模態窗口控制器中的方法。從哪裏獲得NSPersistentDocument中的託管對象上下文?

- (IBAction)saveContext:(id)sender { 

if ([tagsArray count] != 0) { 
    int objectcount; 
    for (objectcount = 0; objectcount < [tagsArray count]; objectcount ++){ 
     Tag *singleTag = (Tag *) [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:self.managedObjectContext]; 
     singleTag.tagname = [tagsArray objectAtIndex:objectcount]; 
     singleTag.video = selectedFile; 
     NSLog(@"Tagnames %@",singleTag.tagname); 

    } 
} 
[NSApp stopModalWithCode:NSOKButton]; 
[self.window close]; 
} 

好吧,編譯器不滿意self.managedObjectContext。可以理解,因爲這個班沒有上下文。我理解它的方式,使用基於文檔的應用程序只需使用一個MOC。我不明白的是如何訪問文檔的MOC。蘋果的文檔有點不清楚。

獲取管理對象的上下文

在OS X:

在單協調的應用程序,你可以從應用程序委託直接將應用程序的上下文。

在基於文檔的應用程序中,您可以直接從文檔實例獲取上下文。

我很尷尬地說我不知道​​這是什麼意思。如何從文檔實例獲取上下文?它是某種全局變量嗎?任何幫助是極大的讚賞。

回答

3

所以也許在模態窗口的控制器類中有一個屬性,並在調用modalWindow.show或其他任何你正在使用的設置之前設置modalWindow.moc=self.managedObjectContext。假設self是您的NSPersistentDocument子類。

你必須使用現有的MOC文件,不要創建一個新的(你可以但你不想去那裏)。

文檔MOC是將對象添加到Core Data存儲庫的權威接入點。

+0

對不起,回覆/確認已晚。這釘了它!我認爲這將是我忽略的一件非常簡單的事情。 Newb失敗。非常感謝! –

2

NSPersistentDocumentmanagedObjectContext方法來獲得它的管理對象上下文:當您創建模式窗口傳遞給它的文件managedObjectContext使用

NSManagedObjectContext *context = [yourPersistentDocument managedObjectContext]; 
+0

感謝您的回覆。 「yourPersistentDocument」部分究竟應該是什麼?我認爲這將是「文檔」,引用我的Document.m類,這是我開始此項目時爲我自動生成的NSPersistentDocument sublcass xcode。我得到一個編譯器警告「選擇器沒有已知的類方法'managedObjectContext'」。 –

+0

@Joseph:奇怪,文檔(http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSPersistentDocument_Class/Reference/Reference.html#//apple_ref/occ/instm/NSPersistentDocument/managedObjectContext)表示NSPersistentDocument有一個managedObjectContext方法。 –

+0

所以文檔會是正確的呢?我無法想象會發生什麼。我應該簡單地爲這個班級創建一個MOC嗎?還是它需要你只使用提供的那個? –

相關問題