NSManagedObject子类和setValuesForKeysWithDictionary:

Cor*_*oyd 7 cocoa cocoa-touch core-data key-value-coding

我正在NSManagedObject使用以下命令初始化子类:

- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues
Run Code Online (Sandbox Code Playgroud)

我也故意给它未定义的键,当然应该抛出异常.

所以,我已经实施了:

- (void)setValue:(id)value forUndefinedKey:(NSString *)key
Run Code Online (Sandbox Code Playgroud)

如果未定义某个键,则将其映射到正确的键.

但是,我的实现永远不会被调用,而是NSManagedObject使用了实现,这反过来仍然会抛出异常.

是否存在阻止setValuesForKeysWithDictionary:使用任何子NSManagedObject类实现的行为(或错误)setValue:forUndefinedKey:

按要求添加代码,但由于我只是实现了一个现有的方法,但是没有被调用,我不知道它会有多大的帮助:

在上下文中:

- (Company*)companyWithDictionary:(NSDictionary*)values{

    Company* newCompany = (Company*)[NSEntityDescription insertNewObjectForEntityForName:@"Company" inManagedObjectContext:self];

    [newCompany setValuesForKeysWithDictionary:values];

    return newCompany;
}
Run Code Online (Sandbox Code Playgroud)

Company子类中(从未调用过):

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{

    if([key isEqualToString:idKey]){

        [self setValue:value forKey:@"uniqueID"];

    }else if([key isEqualToString:descriptionKey]){

        [self setValue:value forKey:@"descriptionText"];

    }else if([key isEqualToString:timeUpdatedKey]){

        [self setValue:value forKey:@"dateUpdated"];

    }else{

        [super setValue:value forUndefinedKey:key];

    } 
}
Run Code Online (Sandbox Code Playgroud)

Six*_*tto 3

NSManagedObject 绝对没有任何内在的东西可以阻止这种情况;我正在我正在开发的应用程序中执行此操作。你能发布更多你的代码吗?

还有一个想法:您确定是它setValue:forUndefinedKey:引发了异常吗?对于托管对象,我很确定您还需要实现valueForUndefinedKey:(吸气剂)才能使事情正常工作。