【问题标题】:Object mapping with RestKit使用 RestKit 进行对象映射
【发布时间】:2013-05-24 11:18:06
【问题描述】:

我对 RestKit 框架相当陌生。我在解析一些 JSON 响应时遇到了困难。

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

这是我的登录网络服务的响应。

我想要的是将 sessionToken、FirstName 和 LastName 的值映射到一个类中。为此,我创建了一个用户类

@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。

网址是 http://[BASE URL]/login

我已经通过 link 了解对象映射,但可以解决此问题。

这方面的任何指示都会非常有帮助

问候,

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)];

但我仍然有一个困惑。我必须创建另一个登录名

@interface Login : NSObject

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

@end

Login 拥有一个 User 类的对象作为属性。有什么方法可以通过简单地创建单个对象而不是多个嵌套对象来获取 JSON 响应中所有键的值?

【问题讨论】:

    标签: objective-c restkit


    【解决方案1】:

    将原始映射与单个类一起使用,您可以这样做:

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

    【讨论】:

    • 谢谢!帮了我很多!
    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2014-02-01
    • 2014-12-30
    • 2013-08-01
    相关资源
    最近更新 更多