首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mantle获取数据

使用Mantle获取数据
EN

Stack Overflow用户
提问于 2016-10-11 02:55:02
回答 1查看 115关注 0票数 0

我正在处理一个应用程序,当我试图从从服务器接收的数据中读取值时,我被阻塞了。

我有这样的代码:

代码语言:javascript
复制
//Item.h
@interface Item : MTLModel <MTLJSONSerializing>
@property (copy, nonatomic) NSNumber *itemId;
@property (copy, nonatomic) NSString *name;
@end

//Item.m
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
    return @{
             @"itemId" : @"id",
             @"name" : @"name"
             };
}

下面是我认为错误的代码:

代码语言:javascript
复制
// responseObject is the data received from server using AFNetworking
for (NSDictionary *dict in responseObject) {
    Item *myItem = [MTLJSONAdapter modelOfClass:Item.class fromJSONDictionary:dict error:nil];
}

responseObject的模式是:

代码语言:javascript
复制
{
  "message": "message",
  "success": true,
  "item": {
    "id": 14576,
    "name": "name",
    "created_at": 1438245872,
    "repeat": false,
    "thumb": {
      "src": "urlToImage",
      "width": 100,
      "height": 120
    }
  }
}

当我运行应用程序时,崩溃消息是

代码语言:javascript
复制
-[NSTaggedPointerString count]: unrecognized selector sent to instance 0xa737365636375737
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString count]: unrecognized selector sent to instance 0xa737365636375737'

我还尝试使用以下语句来获取数据,但在本例中,itemId和name为空:

代码语言:javascript
复制
Item *myItem = [MTLJSONAdapter modelOfClass:Item.class fromJSONDictionary:responseObject error:nil];

所以我有两个问题:我怎样才能让它工作?而且,我应该如何获得相同的“拇指”的值呢?我看到它是一个嵌套的块,我认为这可能会更有问题。

我希望你能帮我解决这个问题。提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-10-11 03:23:30

必须声明与JSON数据相关的完整密钥路径:

代码语言:javascript
复制
//Item.m
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
    return @{
             @"itemId" : @"item.id",
             @"name" : @"item.name"
            };
}

要解析thumb,您可以使用密钥路径"item.thumb.src"。但最好像这样创建单独的类:

代码语言:javascript
复制
//Thumb.h
@interface Thumb : MTLModel <MTLJSONSerializing>
@property (copy, nonatomic) NSURL *src;
@end

//Thumb.m
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
   return @{
            @"src" : @"src"
          };
}

然后使用Item进行下一步更改:

代码语言:javascript
复制
//Item.h
@interface Item : MTLModel <MTLJSONSerializing>
@property (copy, nonatomic) NSNumber *itemId;
@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) Thumb *thumb;
@end

//Item.m
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
    return @{
             @"itemId" : @"item.id",
             @"name" : @"item.name"
             @"Thumb" : @"item.thumb"
           };
}

我希望它能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39964952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档