2010-06-26 61 views
0

我是OS X編程新手,但一般都喜歡它。我有以下問題:優雅地將對象添加到arraycontroller,它本身鏈接到另一個arraycontroller?

我有兩個核心數據實體鏈接通過一對多與他們各自的陣列控制器(股票控制器和價格歷史控制器,其中後者控制器綁定到庫存控制器,與控制器密鑰=選擇和模型關鍵路徑= priceHistory,這是將股票實體鏈接到價格歷史記錄控制器控制的PriceDataPoint實體的關係

這一切在我的用戶界面中像魔術一樣工作,我可以選擇股票並添加/刪除價格點,當它被選中時,但是,我需要能夠以編程的方式進行此操作。

  1. 如果我只是簡單地調用[stockController add:self],那麼用更新的對象具有正確的默認值的新對象,鏈接到選定的庫存 - 即使「自我」不是正確的類/實體。這對我來說是一個混亂,我不明白(我明白Stock Controller通過KVO綁定知道所選股票,並可能根據需要設置關係,但我不明白它是如何投射的'self',這是一個相當隨機的類到所需的對象類型(一個普通的NSManagedObject)?其次,如果我這樣做,我該如何獲得一個引用回該對象,所以我可以編輯其值?

  2. 但是,更重要的是,如果我遵循Apple示例,請創建一個新的NSManagedObjectNSEntityDescription:insertNewObjectForEntity:並使用[stockController addObject:Newly created Object]我可以在添加它之前寫入想要的值,但與「父」股關係不是由addObjects:方法設置的。我相信我也可以弄清楚如何寫這個,但是可可的其他所有東西都可以如此優雅,這讓人感覺很奇怪,所以我希望有人能夠很快地清楚這一點,並指出我這樣做的一種優雅方式。

回答

0

首先,讓我們通過陳述核心數據驅散魔法是建立與可可綁定機制(它給你的陣列控制器,除其他事項外),並之上構建核心價值編碼/鍵值觀察機制工作。核心數據文檔明確指出,您應該在這些技術中擁有良好的背景,以瞭解事情如何/爲什麼起作用。

對於你的第一個問題,你說你被NSArrayController的-add:方法弄糊塗了。你看過簽名/原型嗎?參數(你傳遞自己的地方)是(id)發送者,這是基本動作的標誌(參見文檔中的「目標/動作」)。如果你願意,你可以傳遞自己,其他的對象,甚至是零。該參數不是您希望添加到由陣列控制器管理的集合中的對象。

對於第二個問題,如果要定製事物或保留對新插入對象的引用,那麼您就處於正確的軌道上。你可以使用-addObject:方法(它將對象添加爲參數),但是你必須告訴數組控制器使用-fetch :(另一個操作w/sender作爲參數),以便刷新控制器和任何與其內容綁定的東西(例如表格/大綱)。

+0

感謝您的迴應 - 我在此期間去了-addObject:route,但不必調用-fetch,這可能是因爲我在IB中設置了自動更新。 關於你的第一點 - 謝謝。沒有這樣想過。 – NSSunrider 2010-06-26 19:58:13

相關問題