2012-04-26 41 views
4

。然后,我试图获取相同的JSON请求并将其重新充入核心数据对象。通货膨胀期间,我得到这个错误:iPhone核心数据“未能呼吁NSManagedObject类指定初始化”的错误反序列化JSON到我使用RestKit到嵌套核心数据模型转换成JSON文件,并将其上传到Web服务的嵌套核心数据实体

CoreData: error: Failed to call designated initializer on NSManagedObject class 'AppUser' 
    2012-04-26 10:25:50.850 DropboxSync[3824:5843] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<AppUser 0x2b7820> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "lastName".' 

类有一个lastName属性:

@property (nonatomic, retain) NSString * firstName; 
@property (nonatomic, retain) NSString * lastName; 
@property (nonatomic, retain) NSString * localDataFilepath; 
@property (nonatomic, retain) NSSet *events; 
@property (nonatomic, retain) AppUserWrapper *wrapper; 

**What could be causing this?** 

我在我的核心数据模型中定义的3个实体:

用户 事件 图片

用户有多个事件,事件有多个图像

我已经定义了如下定义的RestKit对象映射。 (void)setupObjectMapping { RKObjectManager * objectManager = [RKObjectManager sharedManager]; RKObjectMapping * mapping = [RKObjectMapping mappingForClass:[Article class]];

[mapping mapAttributes:@"articleID", @"title", @"body", nil]; 

    //********************************  

    RKObjectMapping *imageMapping = [RKObjectMapping mappingForClass:[ImageEntity class]]; 

    [imageMapping mapAttributes:@"createDate", @"localFilePath", nil]; 
    [objectManager.mappingProvider addObjectMapping:bleedImageMapping]; 
    [objectManager.mappingProvider setSerializationMapping:[imageMapping inverseMapping] forClass:[ImageEntity class]]; 
    [objectManager.mappingProvider imageMapping forKeyPath:@"images"]; 

    //********************************  

    RKObjectMapping *eventMapping = [RKObjectMapping mappingForClass:[Event class]]; 

    [eventMapping mapAttributes:@"createDate", @"severity", nil]; 
    [eventMapping mapRelationship:@"images" withMapping:imageMapping]; 

    [objectManager.mappingProvider addObjectMapping:eventMapping]; 
    [objectManager.mappingProvider setSerializationMapping:[eventMapping inverseMapping] forClass:[Event class]]; 
    [objectManager.mappingProvider setMapping:eventMapping forKeyPath:@"bleedEvents"]; 

    //******************************** 
    //setup App user mapping 
    RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[AppUser class]]; 

    [userMapping mapAttributes:@"firstName", @"lastName", nil]; 
    [userMapping mapRelationship:@"events" withMapping:eventMapping]; 
    [objectManager.mappingProvider addObjectMapping:userMapping]; 
    [objectManager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[AppUser class]]; 
    [objectManager.mappingProvider setMapping:userMapping forKeyPath:@"appUser"]; 

    //******************************** 
    //setup App user wrapper mapping 
    RKObjectMapping *userWrapperMapping = [RKObjectMapping mappingForClass:[AppUserWrapper class]]; 


    [userWrapperMapping mapRelationship:@"appUser" withMapping:userMapping]; 
    [objectManager.mappingProvider addObjectMapping:userWrapperMapping]; 
    [objectManager.mappingProvider setSerializationMapping:[userWrapperMapping inverseMapping] forClass:[AppUserWrapper class]]; 
    [objectManager.mappingProvider setMapping:userWrapperMapping forKeyPath:@"appUserWrapper"]; 


} 

下面是我的嵌套的数据结构转换成JSON:

-(void)convertTestUserToJSON 
{ 

    NSString* fullPath = [[$ documentPath] stringByAppendingPathComponent:@"sampleJSONFolder"]; 
    [[NSFileManager defaultManager] createDirectoryAtPath:fullPath withIntermediateDirectories:YES attributes:nil error:nil]; 
    // Make the file 

    NSString* fullFilepath = [NSString stringWithFormat:@"%@_%@.json",appUser.firstName,appUser.lastName]; 
    NSString* dataFile = [fullPath stringByAppendingPathComponent:fullFilepath]; 
    appUser.localDataFilepath = dataFile; 
    [[AppUser managedObjectContext] save:nil]; 


    NSError* error = nil; 


    RKObjectMapping *serMap = [[[RKObjectManager sharedManager] mappingProvider] serializationMappingForClass:[AppUser class]]; 
    NSDictionary *d = [[RKObjectSerializer serializerWithObject:appUser mapping:serMap] serializedObject:&error]; 


    if(error!=nil) 
    { 
     NSLog(@"!!!!! Error: %@",[error localizedDescription]); 
    } 

    //this is where the JSON is generated 
    NSString* dataContents = [d JSONString]; 
    BOOL success = [dataContents writeToFile:dataFile atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
    if(!success) 
    { 
     NSLog(@"Error writing to data file!"); 
    } 
} 

这里的JSON转换

{"firstName":"First Name0","events":[{"severity":0,"images":[{"createDate":"2005-04-21 08:28:47 +0000","localFilePath":"localPhoto#10.png"},{"createDate":"2009-12-19 07:26:54 +0000","localFilePath":"localPhoto#11.png"}],"createDate":"2003-05-25 15:32:53 +0000"},{"severity":1,"images":[{"createDate":"2008-08-02 19:40:14 +0000","localFilePath":"localPhoto#10.png"},{"createDate":"2007-01-12 05:50:27 +0000","localFilePath":"localPhoto#12.png"},{"createDate":"2007-05-28 12:19:39 +0000","localFilePath":"localPhoto#11.png"}],"createDate":"2001-05-28 23:38:23 +0000"},{"severity":2,"images":[{"createDate":"2002-10-09 19:47:39 +0000","localFilePath":"localPhoto#10.png"},{"createDate":"2008-08-17 03:21:12 +0000","localFilePath":"localPhoto#11.png"}],"createDate":"2005-10-18 03:40:52 +0000"}],"lastName":"Last Name83"} 

的。当我试图夸大这一JSON回到结果嵌套的核心数据实体,我得到一个错误:

CoreData: error: Failed to call designated initializer on NSManagedObject class 'AppUser' 
2012-04-26 10:25:50.850 DropboxSync[3824:5843] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<AppUser 0x2b7820> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "lastName".' 

似乎inflater在尝试映射之前没有实例化所有关系。我错了吗?什么可能导致这种情况发生?我试图用两种不同的方式重新充气我的JSON,并且两次都出现这个错误。如何解决?

感谢您的任何意见!

+1

你是否找到任何理由?我面临类似的麻烦。请用答案更新您的解决方案。 – 2012-07-06 08:10:11

+0

你解决了这个问题吗? – Bonnie 2012-09-04 10:54:58

回答

4

核心数据处理的时候,所以RestKit的实例化一个NSManagedObject定期NSObject的问题是使用RKObjectMapping代替RKEntityMapping

+2

仅供参考 - RKManagedObjectMapping现在RKEntityMapping - 见https://github.com/RestKit/RestKit/wiki/Upgrading-from-v0.10.x-to-v0.20.0 – 2013-07-25 16:37:44