2011-09-01 95 views
0

我翻看了一個核心數據教程,它將核心數據代碼放入創建Window項目時創建的AppDelegate類中。我能夠成功保存並從預製AppDelegate類中檢索數據。保存來自ViewControllres(Core Data)的數據

我的問題是,如果我有一個ViewController保存數據,我該如何去保存該特定類的數據。

  • 是否需要重新定義該類中的持久性存儲和managedObjectModel?
  • 如果是這樣,那麼執行它的程序化方法是什麼(因爲以前它是爲我生成的),即我需要聲明哪些方法/實例變量/屬性。

任何澄清一直站在有可能是

回答

1

無需通過應用程序委託或重新定義持久性存儲等。所有您需要的是對managedObjectContext的引用。通常情況下,這是一個屬性(比如視圖控制器),你可以在創建之後從外部設置屬性,並且可以從視圖控制器類中輕鬆訪問(比通過應用程序委託要容易得多!)。您可以輕鬆地將其傳遞給其他視圖控制器,並使用標準方法讀取和寫入核心數據。

如果你想保存自己的對象,是的 - 你必須創建自己的託管對象模型(通過修改爲你生成的模板)。

+0

即時通訊試圖瞭解你剛剛說的話。編輯oops。我不認爲按回車會發送我未完成的回覆 所以你建議我可以創建一個屬性說,ManagedObjectContext * manaObjCon,然後在viewDidLoad例如引用它像 'manaObjCon =(MyApplicationDelegate *)[[UIApplication sharedApplication]委託] .managedObjectContext;'? – bubbles

+0

不可以。您將'managedObjectContext'作爲屬性傳遞給視圖控制器。例如,在應用程序委託中:'rootViewController.managedObjectContext = self.managedObjectContext;'。然後在'rootViewController'中,你不必做任何事情。只需使用'managedObjectContext'的數據模型,即執行提取,插入,保存到你的心中的內容。 – Mundi

+0

所以在rootViewController中,我將不得不擁有一個名爲managedOBjectContext的屬性。正確?對不起,如果我重複可能已經說過的話。我只是想完全理解這一切!謝謝! – bubbles

0

爲什麼不直接在您希望將數據保存在視圖控制器到您的應用程序委託的參考?然後,您可以像往常一樣訪問託管對象上下文並調用其保存方法。

在您的視圖控制器的.h文件中有一個與您的應用程序委託類型相同的屬性。然後在.m文件viewDidLoad方法這樣設置參考:

self.appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate]; 

然後,當你想保存你可以訪問應用程序委託管理對象上下文,像這樣:

[self.appDelegate.managedObjectContext save:&error]; 

。希望有幫助,我從頭開始寫這個,所以可能會有一些語法錯誤,但編譯器會讓你知道。

+0

我明白了。你的意思是在vie控制器中創建一個AppDelegate實例嗎?你知道任何教程做這件事嗎? – bubbles

+0

我會用一些代碼修改我的帖子,給我兩分鐘 – bennythemink

+0

謝謝!我認爲這一定會有所幫助! – bubbles