iphone - awakeFromInsert 从未调用过

标签 iphone objective-c ios core-data

我有一个使用 Core Data 的应用程序。我在项目中有两个数据模型,我通过合并这两个模型来创建 ManagedObjectContext。这是我执行此操作的代码:

- (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];

可能相关也可能不相关的附加事实: 创建包含问题实体的数据模型后,我使用 Xcode 功能自动创建类。然后我意识到,由于我没有指定在模型中做其他事情,xcode 以复数形式命名类(因为这就是我在模型中对它们的称呼)。所以,我最终得到了“Entries.h”而不是“Entry.h”。我返回并手动更改所有类,并在模型中指定类的名称。

所以,我需要弄清楚为什么 awakeFromInsert 从未被调用过。

最佳答案

awakeFromInsert 在每个对象首次创建时被恰好调用一次。

您需要的是awakeFromFetch,以便每次从存储加载到内存时调用它。

很多时候,您希望在两个地方使用相同或相似的代码。

关于iphone - awakeFromInsert 从未调用过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004583/

相关文章:

iphone - 从 iPhone OS 到 OSX 上的 cocoa

iphone - 根据当前语言 iOS 调整文本字段大小

ios - 非原子强/复制?

objective-c - 如何在 iOS 和 Mac 中使用搜索字段控件?

ios - 在 iOS 中使用 AFNetworking 进行 SSL 固定不起作用

iphone - 如何设置以下代码片段中的recipientItems的值?

ios - 如何从 Objective C IOS 中的最近应用程序中删除应用程序

ios - 如何在字典数组中的内部数组上应用过滤器?

android - 独立世博会(ExpoKit)推送通知

ios - iPhone 6 Flexbox 包装问题