2012-05-10 26 views
2

我有一個叫做Cart的視圖。它顯示一張Item s的表格。這些Item需要堅持,所以Item子類NSManagedObject;值如id,price等屬性的訪問者是@dynamic,以便它們自動生成。我有另一種說法叫Favorites。它顯示Item s的表格,但他們不需要堅持。實際上,只要用戶使用不同的憑證登錄,此視圖就會更改。如何編寫NSManagedObject子類的自定義訪問器?

兩個視圖之間的連接是用戶可以從他的收藏中添加項目到他的購物車。購物車可以從Favorites列表中存儲Item。當物品添加到購物車時,Favorites列表不會更改。

最初,我使Favorites視圖的模型成爲NSDictionary對象的NSArray。當用戶將項目添加到他的購物車時,我從NSDictionary鍵值對中創建項目並將其保存在Core Data中。這種方法看起來不太乾淨或非常乾燥。讓Favorites視圖的模型成爲Item的NSArray是否更有意義?

所以現在我的意圖是實現Item類,以便它代表核心數據模型(NSManagedObject),但也可以使用Favorites視圖。作爲Objective-C和iOS開發的新手,我真的不知道這是如何工作或看起來像。看起來我需要重寫爲我創建的訪問器,但我不能在編譯時使用調用super來調用它們......任何人都可以給我一個關於何時它會知道返回NSDictionary的粗略概述數據還是核心數據數據?在它是核心數據數據的情況下,我如何維持與神奇生成的訪問器相同的效率水平?

更好的是,是否有更好的實施,就像乾燥或更有意義?或者我想將太多功能合併到一個類中?在這種情況下,NSDictionary的NSArray是否是最好的方法?

回答

1

您可以在您的獲取請求(object,objectID,count,dictionary)上指定結果類型。

另外,我不會在MOC之外使用NSManagedObjects。你應該有一個單獨的對象用於存儲內容,或者你可以爲這些對象使用內存中的持久存儲......或者,你可以創建一個單獨的MOC作爲你使用的主數據庫MOC的一個子對象爲您的內存中的對象。

這些方法的優點是您的代碼不必知道它們是否支持磁盤。

只要您不保存MOC,對這些對象的更改將永遠不會進入磁盤。

編輯

NSFetchRequest *fetchRequest = // create the fetch request... 
fetchRequest.resultType = NSDictionaryResultType; 

現在,當您的獲取,而不是找回NSManagedObject的數組,你會回來的NSDictionary的數組。

+0

你介意讓你的第一句話更具體一點嗎?我仍然習慣於Objective-C和iOS,那麼這些不同的函數原型會是什麼樣子呢?謝謝! – user5243421

+0

@JodyHagins +1爲你的答案 –

相關問題