1

この関係マッピングの設定方法がわかりません:

@interface Account : NSManagedObject

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSNumber accountID;

@property (strong, nonatomic) NSSet *sessions;

@end

.

@interface Session : NSManagedObject

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSNumber sessionID;

@end

JSON マッピングしようとしています...

{
    "userSessions": {
        "name" : "Mr. User",
        "identification": 54321,
        "sessions": [
            "418",
            "419",
            "431",
            "441",
            "457",
            "486",
            "504"
        ]
    }
}

セッションとアカウントは、他の 2 つの API 呼び出し (getSessions と getAccountInfo) から既に正しくオブジェクト マップされています。両者の関係がうまくいかなくて困っています。数値の配列はsessionIDs を表します。

これが私が現在試したことです(クラッシュします):

RKEntityMapping *sessionRelationship = [[RKEntityMapping alloc] initWithEntity:sessionEntity];
[sessionRelationship setIdentificationAttributes:@[ @"sessionID" ]];
[sessionRelationship addAttributeMappingFromKeyOfRepresentationToAttribute:@"sessionID"];

RKEntityMapping *accountMapping = [[RKEntityMapping alloc] initWithEntity:accountEntity];
[entityMapping setIdentificationAttributes:@[ @"accountID" ]];
[entityMapping addRelationshipMappingWithSourceKeyPath:@"sessions"
                                                   mapping:sessionRelationship];

NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping
                                                                                   pathPattern:nil
                                                                                       keyPath:@"userSessions"
                                                                                   statusCodes:statusCodes];

編集:

Blake のアドバイスに従って、sourceKeyPath を nil に設定していますが、まだクラッシュが発生しています。

うさぎの穴をたどると、クラッシュが発生しました

RKValueForAttributeMappingInRepresentation(RKAttributeMapping *, NSDictionary *)

...これは、辞書パラメーターが実際には JSON 配列の NSString であるためです。

(lldb) po attributeMapping
(RKAttributeMapping *) $26 = 0x076c6a00 <RKAttributeMapping: 0x76c6a00 (null) => rec>
(lldb) po representation
(NSDictionary *) $27 = 0x0e4a20c0 431
(lldb) po [representation class]
(id) $28 = 0x01f9b8e4 __NSCFString

スタック トレースは次の場所で確認できます。 スタックトレース

4

1 に答える 1

2

RestKit のマッピング ロジック内で未処理のケースに出くわしました。渡される表現が であると想定するマッピング エンジンのレイヤー間でハンドオフがありましたNSDictionaryが、呼び出し元はコントラクトの一部を強制していませんでした。JSON とマッピング構造の例を取り上げ、それを使用して RestKit で単体テストを作成しました。

この問題は、 https://github.com/RestKit/RestKit/commit/d761de0ea7cfb11851b714e49ff3126d65ab7b49の時点で開発ブランチで修正されており、今週末にタグ付けする予定の rc1 バージョンに含まれます。

于 2013-01-26T05:24:31.353 に答える