我有一個使用核心數據的應用程序。我在項目中有兩個數據模型,並通過合併這兩個模型來創建ManagedObjectContext。在這裏,我做的代碼:awakeFromInsert永不叫
- (NSManagedObjectModel *)managedObjectModel {
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
NSURL* entityURL = [[NSBundle mainBundle] URLForResource:@"User_data" withExtension:@"momd"];
NSManagedObjectModel* entityModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:entityURL];
NSURL* whoURL = [[NSBundle mainBundle] URLForResource:@"WHO_data" withExtension:@"momd"];
NSManagedObjectModel* whoModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:whoURL];
NSArray* models = [NSArray arrayWithObjects:entityModel, whoModel, nil];
__managedObjectModel = [NSManagedObjectModel modelByMergingModels:models];
return __managedObjectModel;
}
在我的實體的屬性都不是可選的,我的應用程序崩潰,當我嘗試保存我的managedObjectContext。我相信這是因爲某些屬性沒有設置。我已覆蓋awakeFromInsert:對於父實體:
- (void) awakeFromInsert
{
[super awakeFromInsert];
NSString* userCFUUID = [[NSUserDefaults standardUserDefaults]objectForKey:@"device_identifier"];
if (userCFUUID) {
[self cfuuid:userCFUUID];
} else {
[NSException raise:NSInvalidArgumentException format:@"Entry: awakeFromInsert: cannot find CFUUID"];
}
[self setCreationDate:[NSDate date]]; // the time since Jan 1st 1970 in seconds
[self setEventDate:[NSDate date]];
}
但是awakeFromInsert:永遠不會被調用。我設置一個斷點,並從那裏我創建NSManagedObject聲明臺階的貫通:
LengthEntry *length1 = [NSEntityDescription insertNewObjectForEntityForName:@"LengthEntry" inManagedObjectContext:moc];
其他事實,可能會或可能不會relavent: 創建包含問題的實體數據模型後,我用Xcode的功能自動創建類。然後我意識到,由於我沒有指定在模型中做其他事情,所以xcode命名爲複數意義上的類(因爲這就是我在模型中稱的)。所以,我以「Entries.h」而不是「Entry.h」結束了。我回去並手動更改了所有的類,並在模型中指定了類的名稱。
所以,我需要弄清楚爲什麼awakeFromInsert永遠不會被調用。
我要扔我的2美分,這似乎是典型的情況下,當添加類到編輯器中的實體被遺忘。這確保了自定義實現永遠不會被使用,儘管實體定義足以讓核心數據將您的hud分割成對象存儲。 – Landern 2012-06-26 14:06:26
@摩西,對我來說,確實是忘記爲孩子實體設置班級。謝謝! – phatmann 2013-12-17 15:04:09