我建議字典解決方案更簡單的選項。但是,這是我如何解決這個問題。我的模型已經很大並且很健壯,自定義類和單個根級別高於NSManagedObject
。
所有我需要的是針對單個類調用適當的指定初始化的NSManagedObject
:[super initWithEntity:insertIntoManagedObjectContext:]
。這種方法以及NSEntityDescription
中的元數據是設置所有動態訪問器的實現。
- (id)initWithCoder:(NSCoder *)aDecoder {
CoreDataStack *cds = [LibraryDiscoverer unarchivingCoreDataStack];
NSEntityDescription *entity = [cds entityDescriptionForName:[[self class] entityName]];
NSManagedObjectContext *moc = [cds managedObjectContext];
self = [super initWithEntity:entity insertIntoManagedObjectContext:moc];
self.lastEditDate = [aDecoder decodeObjectForKey:@"lastEditDate"];
return self;
}
CoreDataStack
是我對CoreData的一種抽象。 LibraryDiscoverer
是獲取核心數據信息的全局訪問鉤子。 entityName
是一種定義從類名提供實體名稱的方法;如果遵循命名約定(即類名稱=實體名稱),則可以通用地實施它。
我的類層次結構中的所有其他initWithCoder:
方法都是標準NSCoder
,注意你不需要編碼關係的兩個方向,CoreData會爲你重新連接它。 (正如往常一樣,包括字典解決方案在內。)
我有同樣的問題,而且我最終做了巴里所說的 - 它工作得很好。 – jeff7091 2009-11-24 06:15:38
它會好也代替NSDictionary,我只會有一個與我的NSManagedObject相同的模型?那裏我會做映射? – bluezald 2012-06-21 02:45:04
任何人都可以請解釋NSURL編碼NSManagedObjectIDs如何有助於關係?謝謝! – 2012-07-10 16:57:29