我在我的OS X應用程序中使用Core Data,我有一些TableViews綁定到NSArrayControllers。我遇到的問題是,當我試圖使用數組控制器填充工作表中的表格視圖時,我不希望內容持續存在。使用沒有核心數據的NSArrayController
下面是應用程序如何掛在一起;
窗口1 - 顯示錶格視圖中的用戶列表,並允許添加和刪除用戶。內容通過核心數據綁定持久化。
窗口2 - 顯示錶格視圖中的組列表。第二個表視圖顯示屬於所選組的用戶的列表。內容通過核心數據綁定持久化。 「添加用戶」按鈕會調用工作表來將用戶添加到組中。
添加用戶工作表 - 此工作表顯示的用戶不是所選組的成員。按工作表上的關閉按鈕將選定的用戶添加到選定的組。
好吧,所以我遇到的問題是用於添加用戶工作表的數組控制器。當我調用工作表時,我遍歷所有用戶,並將任何用戶添加到數組控制器中,如果他們不在組中。當我關閉工作表時,我嘗試使用removeObject清除數組控制器:但這會導致「不能與ModelObjectContect一起使用此方法」。
爲什麼我需要一個MOC從陣列控制器中刪除項目?它僅用於顯示目的,所以我不需要它來堅持。如果我將陣列控制器MOC設置爲我的應用程序委託的陣列控制器,它實際上會刪除用戶,而我顯然不想這麼做。我只是想從表格的表格視圖中刪除它們。
我認爲答案可能是創建另一個MOC作爲便箋簿使用,而不是將其綁定到持久存儲區,但是這只是在使用removeObject時給了我一個不同的錯誤:沿着「can不要刪除另一個MOC中存在的對象。「
爲什麼我允許將對象添加到數組控制器但不刪除它們?如果您實際上不希望物品被移除,您應該訪問底層的「內容」,例如[arraycontroller內容]?我玩過這個遊戲,但得到了奇怪的顯示效果,因爲它似乎與陣列控制器背後的內容一起玩。如果我這樣做,有沒有辦法告訴陣列控制器「順便說一句,我一直在修補你的內容,你可能需要讓自己在一起」?
它看起來像我不應該使用沒有核心數據的陣列控制器,但在文檔中有許多意見表明它可以使用和不使用核心數據。
我認爲這是我的答案,但我無法得到正確的謂語。你已經使用了CONTAINS,但是這是用於字符串的,不是嗎?我嘗試過使用IN,但無法獲得任何快樂,因爲我是一個謂詞noob。我想我需要像[sheetUsersAC setFetchPredicate:[NSPredicate predicateWithFormat:@「NOT%@ IN組」,[groupsAC選擇]]],但這是行不通的。如此接近...... – swampf0etus 2012-03-20 13:14:25
是的,你是對的:'CONTAINS'只適用於字符串。我的錯。我認爲''NONE groups ==%@「'應該可以工作。 – 2012-03-20 17:14:17
終於破解了!我沒有意識到選擇返回代理對象而不是源對象。爲了從選擇中獲得源對象,我必須使用valueForKey:@「self」。一旦我明白了這一點,我發現我可以使用「NONE groups ==%@」或「NOT%@ IN groups」:'[sheetUsersAC setFetchPredicate:[NSPredicate predicateWithFormat:@「NOT%@ IN groups」,[[groupsAC selection] valueForKey:@ 「自我」]]]' – swampf0etus 2012-03-20 21:50:31