RestKit使用RKConnectionDescription来加载数据

时间:2014-06-23 20:09:22

标签: ios objective-c swift restkit

我正在使用RestKit,我无法弄清楚如何使映射工作。我有一个Playlist托管对象,它有许多Beat个托管对象。

let playlistMapping = RKEntityMapping(forEntityForName: "Playlist", inManagedObjectStore: appDelegate.managedObjectStore)
playlistMapping.identificationAttributes = ["playlistId"]
playlistMapping.addAttributeMappingsFromDictionary(["id" : "playlistId", "name" : "name", "beats" : "beatIds"])

let beatMapping = RKEntityMapping(forEntityForName: "Beat", inManagedObjectStore: appDelegate.managedObjectStore)
beatMapping.identificationAttributes = ["beatId"]
beatMapping.addAttributeMappingsFromDictionary(["id" : "beatId", "name" : "name"])

playlistMapping.addConnectionForRelationship("playlistBeats", connectedBy: ["beatIds" : "beatId"])

let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)
let playlistResponseDescriptor = RKResponseDescriptor(mapping: playlistMapping, method: RKRequestMethod.Any, pathPattern: "/playlists/:id", keyPath: "playlist", statusCodes: statusCodes)

let beatResponseDescriptor = RKResponseDescriptor(mapping: beatMapping, method: RKRequestMethod.Any, pathPattern: "/beats/:id", keyPath: "beats", statusCodes: statusCodes)

这是JSON

{
    "playlist": {
        "id": "top-rated",
        "beats": [
            "180574",
            "181515"
        ]
    },
    "beats": [
        {
            "id": "180574",
            "producer": "14649",
            "name": "On The Hunt"

        },
        {
            "id": "181515",
            "producer": "14649",
            "name": "Anatomy"
        }
    ]
}

以下是托管对象

@interface Playlist : NSManagedObject

@property (nonatomic, retain) NSString * playlistId;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) id beatIds;
@property (nonatomic, retain) NSSet *playlistBeats;
@end


@interface Beat : NSManagedObject

@property (nonatomic, retain) NSNumber * beatId;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Producer *producer;
@end

当我运行时,我收到错误:

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:'无法连接关系:   为源实体“播放列表”提供的无效属性:beats'

编辑

我已经阅读了这个答案:Foreign key relationship mapping with RestKit但我不明白如何使它适用于我的特定JSON数据。

NSSet *beats托管对象中已有Playlist个属性。

在另一个问题的问题中,每个Team单独User - 我为每个Beats设置了多个Playlist

编辑2:

好的,我在beatIds实体中添加了Playlist类型的瞬态属性Transformable。我已将其映射为在beat对象中保存playlist id的数组。现在应用程序不再崩溃,但我不认为它正确处理关系。

<Playlist: 0x10dae81b0> (entity: Playlist; id: 0xd000000000040000 <x-coredata://F9813F68-CBAD-4947-81B5-C126E3BF33D9/Playlist/p1> ; data: {
    beatIds = nil;
    name = nil;
    playlistBeats = "<relationship fault: 0x10dae6f10 'playlistBeats'>";
    playlistId = "top-rated";
})

0 个答案:

没有答案