2012-12-17 26 views
1

說我執行做Employee對象獲取所有實體:self.allEmployees = employees;核心數據 - 在實例變量更新NSManagedObjects

然後在後面:NSArray *employees = [context executeFetchRequest:request error:&error];

然後我做設定在我的類的實例變量我的應用程序,我會做一些修改我的員工對象,但不通過訪問self.allEmployees。我正在從另一個班級修改他們。

將我的self.allEmployees數組更新爲我從另一個類創建到員工對象的更改嗎?或者我的self.allEmployees陣列處於員工對象是我第一次執行提取時的狀態? (我懷疑後者)

回答

1

您從獲取請求中返回的數組擁有對活動託管對象的引用。除非您更改不同的fetchLimit或batchSize,否則您將得到一個包含儘可能多的故障對象的數組,因爲查詢將返回對象。

當您訪問這些故障對象之一的屬性時,CoreData會透明地檢索所有屬性的實際數據並將它們返回給您。

受管理的對象始終擁有自己最近一次最後一次調用save on的值。因此,如果您對self.allEmployees進行了修改,則需要在MOC上調用save,這會將更改廣播到所有其他emoployee對象。

這也是爲什麼KVO在NSManagedObject屬性上工作的原因,因爲它們未對所有保存的影響它們的更改進行定義。

+0

如果我的第一個獲取請求返回10個對象,並且設置了self.allEmployees。然後,在後來的應用程序中,我又增加了10名員工,然後再增加self.allEmployees仍然只有10個對象(不是當前所有員工總數的20)? –

+0

這是正確的,NSArray不會神奇地成長爲包含所有新員工。它將僅包含對從第一個提取請求返回的引用。你將不得不重新獲取。 – Cocoanetics

+0

以及如果我刪除一些員工,那麼我需要重新獲取?總而言之,將動態數據存儲在屬性中是一個非常糟糕的主意? –

1

如果您更改從提取中收到的對象,並且不復制它們,那麼是的。這些都是指針。 所以你不需要做另一個獲取請求。

如果更改員工值,指針不會更改。 唯一改變的是實例變量或屬性。

相關問題