この関係マッピングの設定方法がわかりません:
@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) から既に正しくオブジェクト マップされています。両者の関係がうまくいかなくて困っています。数値の配列はsessionID
s を表します。
これが私が現在試したことです(クラッシュします):
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
スタック トレースは次の場所で確認できます。