2015-04-16 23 views
0

我想从两个单独的json文件中映射对象(同时使用RestKit播种sqlite数据库)。这些文件通过外部ID file1Code连接。RestKit:使用外键连接非嵌套关系 - 为源实体提供的无效属性

的结构是这样的:

文件1:

[ { 
    "code": "1", 
    "activ": false, 
    "name": "Joe" 
    }, 
    { 
    "code": "2", 
    "activ": false, 
    "name": "John" 
    } 
] 

文件2:

[ 
    { 
    "code": 666000, 
    "name": "Hausarzt", 
    "file1Code": "1", 
    "activ": false 
    } 
] 

实体文件1是这样的:

@interface File1Entity : KeyTab 

实体对于文件2看起来像这样:

@interface File2Entity : KeyTab 
    @property (nonatomic, retain) File1Entitiy *file1Obj; 

    // Transient 
    @property (nonatomic, retain) NSNumber *file1Code; 

KeyTab(从中既继承)看起来是这样的:

@interface KeyTab : NSManagedObject 
    @property (nonatomic, retain) NSNumber * code; 
    @property (nonatomic, retain) NSString * name; 
    @property (nonatomic, retain) NSNumber * activ;   

现在我尝试使用“连接非嵌套关系使用外键”从RestKit文档中发现here

我使用addConnectionForRelationship这样的:

[file2EntityMapping addConnectionForRelationship:@"file1Obj" 
    connectedBy:@{@"file1Code": @"code"}]; 

但得到错误消息“无法连接关系:对于源实体给出无效的属性”,因为file1Obj是一个属性,而不是一个属性。

这是在RestKit中做到这一点的正确方法吗?

回答

0

您需要在File2Entity上添加file1Code作为临时属性,并在映射期间对其进行设置。外键连接在映射后完成,因此原始JSON不再可用(因此数据不存在的错误)。

+0

实际上,我已经把'file1Code'作为'File2Entity'上的一个瞬态属性。但是之后它又回到了我的[其他未解决的问题](http://stackoverflow.com/q/29670218/332248),关于如何在映射之后和对象被存储之前拦截RestKit,以便我可以自己完成关系。 – Jens

+0

外键映射是如何连接关系。如果你有这个属性,那么你不应该看到'为源实体提供的无效属性'。 – Wain

+0

首先:感谢您的帮助。我试图按照标题为“使用外键连接非嵌套关系”的指南[这里](https://github.com/RestKit/RestKit/wiki/Object-mapping)。我想我的设置与例子几乎相同(我有两个单独的json文件)。 – Jens