1

私はRestKitフレームワークにかなり慣れていません。一部の JSON 応答を解析する際に問題に直面しています。

{
    "success": "1",
    "loginStatus": "Success",
    "sessionToken": "NTE5YTg5NjE4ZDIxYzQ3YzMUybdtsUU8989GVmaW5lZHwxMzY5ODE0MTc4Mzgw",
    "user": {
        "ActivationMethod": false,
        "ActivationToken": "iey4C5E3iMt7mXZL",
        "Active": true,
        "FirstName": "John",
        "LastName": "Doe",
}
}

これは、ログイン Web サービスの応答です。

私が望むのは、sessionToken、FirstName、および LastName の値を 1 つのクラスにマップすることです。このために、クラス User を作成しました

@interface User : NSObject

@property (nonatomic, strong) NSString* firstName;
@property (nonatomic, strong) NSString* lastName;
@property (nonatomic, strong) NSString* sessionToken;

@end

マッピングのために、次のコードを試しました:

  RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[User class]];
  [mapping addAttributeMappingsFromDictionary:@{
   @"FirstName": @"firstName",
   @"LastName": @"lastName",
   @"sessionToken" : @"sessionToken",
   }];

 RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/login" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

  [objectManager addResponseDescriptor:responseDescriptor];

これを使用して、Lastname と Firstname の値を null として取得します。

URL は http://[BASE URL]/login です。

オブジェクト マッピングに関するこのリンクを確認しましたが、この問題を解決できました。

この点に関する指針は非常に役立ちます

よろしく、

tek3

** * ** * ** * ** * **編集** * ** * ** * ** * ****

以下のコードを使用して値を取得できるようになりました。

 RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class] ];
  [userMapping addAttributeMappingsFromDictionary:@{
   @"FirstName": @"firstName",
   @"LastName": @"lastName",
   }];


  RKObjectMapping* loginMapping = [RKObjectMapping mappingForClass:[Login class] ];
  [loginMapping addAttributeMappingsFromDictionary:@{
   @"sessionToken": @"sessionToken",
   }];

  [loginMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"user"
                                                                                 toKeyPath:@"user"
                                                                               withMapping:userMapping]];


  RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:loginMapping pathPattern:@"/login" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

しかし、まだ 1 つの混乱があります。別のログインを作成する必要がありました

@interface Login : NSObject

@property (nonatomic, strong) NSString* sessionToken;
@property (nonatomic, strong) User* user;

@end

ログインは User クラスのオブジェクトをプロパティとして持っています。複数のネストされたオブジェクトではなく、単一のオブジェクトを作成するだけで、JSON 応答のすべてのキーの値を取得する方法はありますか?

4

1 に答える 1

5

元のマッピングを単一のクラスで使用すると、次のことができます。

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[User class]];
[mapping addAttributeMappingsFromDictionary:@{
@"user.FirstName": @"firstName",
@"user.LastName": @"lastName",
@"sessionToken" : @"sessionToken",
}];
于 2013-05-29T12:10:00.173 に答える