2012-08-14 71 views
0

我試圖設置一個相當簡單的視圖,向用戶呈現一張表。該表連接到一個陣列控制器,我想用它從Core Data檢索記錄。出於某種原因,我似乎無法將「managedObjectContext」插件連接到我的應用中的其他任何內容。當我創建我的項目時,在我的應用程序委託中生成了一個屬性,該屬性返回我需要的MOC,但即使在聲明中預先添加了「IBOutlet」後,我也無法在Interface Builder中將其掛起。下圖給出了兩個可用的連接圖像結束:使用Interface Builder爲控制器綁定managedObjectContext插座?

http://yada.im/uploads/image/screenshot/1108/7efebc90ca7187a537da9ae003dd5f3e.png

我敢肯定,我在這裏缺少一些簡單的一步,但我不能告訴我應該寫什麼一段膠水代碼將允許我更容易地把它掛鉤。作爲參考,我試着從控制器的moc插座拖動一行到我能想到的每一個源,並將「文件所有者」類更改爲我的應用程序的類。難倒了!

回答

2

通常在由XCode提供的模板中,managedObjectContextAppDelegate一起出現。 必須將陣列控制器的managedObjectContext參考與AppDelegate中的managedObjectContext綁定。

對於這一點,你必須做的AppDelegate對象內部的廈門國際銀行,即,如果其不存在。(從對象庫中拖動一個對象佔位符,並使其作爲AppDelegate類)

這使得AppDelegate可見綁定在xib中。

下一步實際上是綁定了managedObjectContext。選擇您的陣列控制器並轉到綁定檢查器。在參數部分中,從下拉菜單中選擇App Delegate,然後選中「綁定到」。 用「self.managedObjectContext」填寫「型號關鍵路徑」字段。現在您將在連接檢查器中找到連接。

UPDATE: 創建一個新的AppDelegate對象的過程是必須要做的,只有當它是不是已經存在於主筆尖文件(但總是產生存根在主筆尖文件AppDelegate對象)。

對於非主要筆尖文件,如果我們遵循上述方法,將創建一個新的AppDelegate對象,該對象不會是NSApplication's委託。即使這可以通過連接每個筆尖中提供的應用程序對象代理的委託出口來解決,但該對象仍然不會相同。

結果是兩個不同的managedObjectContext與同一商店交談。儘管在每個步驟中保存更改時這可能會正常工作,但這不是我們想要的。

爲了得到正確的AppDelegate對象,即,在主筆尖文件中使用的一個:創建新的AppDelegate對象的 -instead,直接通過應用到其委託結合陣列控制器的managedObjectContext。換句話說,綁定的對象將是應用程序對象,使用的關鍵路徑將是self.delegate.managedObjectContext

+2

此外,您可以在「Identity Inspector」的「對象控制器」部分中指定要用陣列控制器控制的實體。你們都準備在這之後呈現你的桌子。 – Rakesh 2012-08-14 12:52:32

+0

感謝您的幫助!這絕對讓我更接近讓這張桌子煥發活力。現在我試圖弄清楚如何在控制器上進行預烘烤操作。我已經連接了按鈕來添加:和刪除:但我不確定如何擴展其功能,例如,將工作表滑動到視圖中以供用戶輸入新實體的文本。感覺慷慨? – 2012-08-14 17:59:46

+0

請注意,您不是通過數組控制器添加實體,而是通過對象(即NSManagedObject類的管理對象)添加實體。 – Rakesh 2012-08-15 08:25:31

0

添加實體對象的方式取決於您要實現的特定邏輯。 通用且簡單的解決方案是,將字段輸入到陣列控制器,就像您對錶格所做的那樣,然後將陣列控制器方法連接到表格內的按鈕。

另一種方法是在調用超類方法[super add:sender]之前,對NSArrayController進行子分類並覆蓋超​​類方法(如add:)以編寫代碼(用於打開幻燈片表)。不要忘記指定NSArrayController的這個子類作爲xib中數組控制器的類。

相關問題