我在覈心數據的一個方面略有困惑。也就是說,我什麼時候使用基本的alloc/init例程來創建一個包含核心數據的對象並將其保存到當前的託管對象上下文中。使用核心數據時的模型實例化問題
我知道這是一個相當模糊的問題,所以讓我舉個例子。
我有一個應用程序,我目前正在對iPhone上的所有用戶通訊錄進行迭代。從那裏,我寫了一個名爲'人'的模型班。我曾經在一個循環中做這樣的事情:
Person * person = [[Person alloc] initWithWrapper:mywrapper];
mywrapper將包含一個NSDictionary與人的屬性。之後,我可以使用個人對象在我的應用中填充地址簿。
現在我已經開始使用Core Data重建部分應用程序。我是否繼續使用上述策略填充我的地址簿?或者我會這樣做:
Person *person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
[person setName:name];
[person setDob:dob];
// Commit the change.
NSError *error;
if (![managedObjectContext save:&error]) {
// Handle the error.
}
問題是,每次應用程序啓動時都會執行此代碼。我是否應該不使用核心數據,因爲每次應用程序加載時都會使用冗餘實例來填充存儲機制?我應該修改我的NSManagedObject(Person類)並添加我的initWithWrapper:方法並繼續像我平常那樣嗎?
有點困惑,會喜歡澄清。
因此,每次應用程序啓動時,您仍然將person對象添加到managedObjectContext中?如果每個對象始終都是同一個人開始?這不會在數據存儲中複製Person對象嗎? – Coocoo4Cocoa 2009-08-04 01:35:58
@ Coocoo4Cocoa爲什麼不只是執行謂詞爲「name =%@」的提取請求並查看它是否在添加新人之前返回任何結果? – 2009-08-04 01:45:23