Objective-C RestKit 没有输出

Posted

技术标签:

【中文标题】Objective-C RestKit 没有输出【英文标题】:Objective-C RestKit no Output 【发布时间】:2015-09-06 11:46:43 【问题描述】:

我正在使用 RestKIT 为我想要使用的 API 发出 GET 请求。可惜没有输出。这是 GET 请求的输出:


  "return_code": 0,
  "return_message": "",
  "result": 
    "products_count": 2,
    "product": [
      
        "id": "2440508995",
        "name": "Long Sweater",
        "description": "This product guarantees warmth in times of need.",
        "price": 8,
        "categories_ids": "73978179"
      ,
      
        "id": "2455113539",
        "name": "Tommy Hilfiger Pants",
        "description": "Exclusive brown pants",
        "price": 13,
        "categories_ids": ""
      
    ]
  

显然我只想要一个数组,所有产品都存储在其中。这是我的方法。

- (void)loadProducts

    RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[Result class]];
    [resultMapping addAttributeMappingsFromDictionary:@
                                                          @"products_count": @"products_count",

                                                          ];

    RKObjectMapping* productMapping = [RKObjectMapping mappingForClass:[Product class]];
    [productMapping addAttributeMappingsFromDictionary:@
                                                         @"id": @"id",
                                                         @"name": @"name",
                                                         @"description": @"description",
                                                         @"price": @"price",
                                                         @"categories_ids": @"categories_ids"
                                                         ];

    [resultMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"product" toKeyPath:@"product" withMapping:productMapping]];



    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:productMapping method:RKRequestMethodAny pathPattern:nil keyPath:@"result" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    NSURL *URL = [NSURL URLWithString:@"https://api.api2cart.com/v1.0/product.list.json?api_key=//some keyf&store_key=//some key"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];
    [objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

        RKLogInfo(@"Load collection of Products: %@", mappingResult.array);
     failure:^(RKObjectRequestOperation *operation, NSError *error) 
        RKLogError(@"Operation failed with error: %@", error);
    ];

    [objectRequestOperation start];


我制作了两个类,一个用于具有 NSNumber“products_count”的结果,另一个用于包含所有产品态度的 Product 类。问题是即使建立了连接并且没有“错误”,mappingResult.array 显然是空的。代码有什么错误?

【问题讨论】:

您正在使用结果响应描述符中的产品映射... 所以我已经用 resultMapping 代替它了? 这将是第一件事。你真的需要结果容器吗?您可以使用响应描述符键路径直接下钻到产品... 好的,我两个都试过了: 1.我把它改成resultMapping,得到Product类不符合键值的错误。 2.我扭转了变化(所以现在它的产品再次映射)并作为关键路径response.product;但是它告诉我只有结果、return_code 和 return_message 是可用的关键路径 response.product ?你是说result.product 吗? 【参考方案1】:

您实际上并不需要您的 Result 类,因为该数组已经为您提供了帐户,您可以直接访问该数组。

所以,您最初的问题是您在响应描述符中使用了错误的映射。您只需要切换到结果映射即可。

您可以在响应描述符中使用产品映射,但您应该将密钥路径更改为result.products

您的产品映射也存在问题,因为 description 是所有 NSObject 子类上的现有方法,因此您需要通过添加名为 overviewtitle 的属性来更改对它的使用。

【讨论】:

以上是关于Objective-C RestKit 没有输出的主要内容,如果未能解决你的问题,请参考以下文章

RestKit:JSON 映射不起作用 Objective-c

RestKit 和拉动刷新

RestKit 在 RKEntityMapping 行崩溃

使用自省restkit的对象映射

将restkit安装到xcode中-总是这么复杂吗?

如何过早取消 RestKit 中的请求并调用“didFailWithError”