1

我有一个用于此类项目的 JSON 数据结构

{
    "id": "8a1a39479d03d959", 
    "sortOrder": 3, 
    "timestamp": 1381669499.11, 
}

和另一个只有一个项目的文件结构:

{
    "id": "d88e3c3d1630db4c", 
    "item": "8a1a39479d03d959", 
    "timestamp": 1381669505.364, 
    "version": 2
}

我一直在努力让这种映射起作用,以至于我向[files]JSON 项目添加了一个列表,只是为了映射关系。但是,阅读Google group 上的一篇较早的帖子,我发现它应该可以像这样映射这些关系(未经测试的代码,只是解释上面的链接):

RKManagedObjectMapping *itemMapping = [RKManagedObjectMapping mappingForClass:[Item class]];
itemMapping.primaryKeyAttribute = @"itemID";
[itemMapping mapKeyPath:@"sortOrder" toAttribute:@"sortOrder"];
[itemMapping mapKeyPath:@"id" toAttribute:@"itemID"];

RKManagedObjectMapping *fileMapping = [RKManagedObjectMapping mappingForClass:[File class]];
fileMapping.primaryKeyAttribute = @"fileID";
[fileMapping mapKeyPath:@"id" toAttribute:@"fileID"];
[fileMapping mapKeyPath:@"item" toAttribute:@"itemID"];
[fileMapping mapKeyPath:@"version" toAttribute:@"version"];

[fileMapping hasOne:@"item" withMapping:itemMapping];
[fileMapping connectRelationship:@"organization" withObjectForPrimaryKeyAttribute:@"itemID"];

但是hasOne:withMapping:在 RestKit 0.20 中不再存在。如今,将一对多关系映射到 JSON 中作为简单字符串返回的 id 的正确方法是什么?仅供参考,我在这个项目中使用 CoreData 集成。

4

2 回答 2

1

好的,您的映射将项目标识设置为identifier. 在文件上,这与任何内容都不对应 - 它需要。添加一个瞬态属性并将其映射item到它(我们称之为它itemIdentifier)。现在,您可以设置关系映射来填充核心数据关系(应该是双向的,我假设item<<-> files):

[fileMapping addConnectionForRelationship:@"item" connectedBy:@{ @"itemIdentifier": @"identifier" }];
于 2013-10-22T18:29:58.403 回答
0

尝试这个:

RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Item"
                                               inManagedObjectStore:[YourManagedObjectStore];
[mapping addAttributeMappingsFromDictionary:@{
                                              @"sortOrder": @"sortOrder",
                                              @"id":@"itemID"
                                              }];

mapping.identificationAttributes = @[@"itemID"];

[mapping addRelationshipMappingWithSourceKeyPath:@"organization"
                                         mapping:fileMapping];

我希望它有所帮助。

于 2013-10-22T02:35:29.040 回答