2009-09-02 57 views

回答

2

作爲單例的替代方案,考慮將其作爲應用程序委託中的屬性,在應用程序完成啓動時進行初始化。

在您的視圖控制器中,當實例化視圖時,請設置一個NSManagedObject對此屬性值的引用。

+0

歐凱中,那是很有必要知道,但當我想要在多個控制器中訪問nsmanagedobject數據時,我需要做什麼? – Ton 2009-09-03 07:44:45

+1

如果您的控制器中有一個NSManagedObject引用指向您在應用程序委託中實例化的單個實例,那麼您應該可以像往常一樣訪問它中的數據。在http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html – 2009-09-03 09:56:44

+1

上查看Cocoa文檔您可能還想看看Core Data教程,其中介紹瞭如何設置視圖控制器:http://developer.apple.com/IPhone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Articles/06_Deleting.html#//apple_ref/doc/uid/TP40008305-CH108-SW1 – 2009-09-03 13:23:17

2

您已經傳遞NSManagedObjectContext。您可以隨時使用它來獲取所需的數據。

我不知道Core Data如何對你作出單例實例做出反應。首先,NSmanagedObject不使用與NSObject相同的方法進行初始化。

它使用-awakeFromInsert和-awakeFromFetch。所以你已經有了一個問題。

查看來自Marcus Zarra的這個article(核心數據大師)。

總之,只需執行新的獲取以獲取所需的數據,不需要在那裏工作一個單例。

+0

什麼時候需要做什麼,我有一組數據,我想在多個控制器中使用。當一個控制器更改對象的數據時,我還需要更新控制器視圖。 – Ton 2009-09-03 07:39:16

+0

對,如果您更改模型,請發佈通知。然後讓您的視圖控制器監聽此通知,並根據需要重新獲取數據。 – 2009-09-03 18:14:04

+1

不幸的是,該鏈接不再有效。 – ThomasW 2016-03-18 08:42:10

0

這取決於你爲什麼希望使它成爲一個單身人士,如果你無法將它傳遞給所有需要訪問數據的實體,使用單例並不是一個好的解決方案。它通常引入更多的問題而不是解決任何問題。

如果你擔心多次編輯同一個對象,核心數據有機制來處理,請參閱「變更管理」一章中的「核心數據編程指南」

+0

其實我想它使它成爲一個單身人士,因爲我在多個控制器中使用相同的數據在該abject中,並在另一個問題上stackoverflow,他們回答說,我應該使用一個單身人士的那種情況?而不是傳遞給對象。 – Ton 2009-09-03 07:36:25