2016-10-10 35 views
0

我正在處理應用程序,當我試圖從服務器接收的數據中讀取值時,我被阻止。使用地幔獲取數據

我有這樣的代碼:

//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" 
      }; 
} 

這是我認爲的代碼是錯誤的:

// 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的模式是:

{ 
    "message": "message", 
    "success": true, 
    "item": { 
    "id": 14576, 
    "name": "name", 
    "created_at": 1438245872, 
    "repeat": false, 
    "thumb": { 
     "src": "urlToImage", 
     "width": 100, 
     "height": 120 
    } 
    } 
} 

當我運行應用程序,崩潰消息是

-[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和名稱是零嘗試:

Item *myItem = [MTLJSONAdapter modelOfClass:Item.class fromJSONDictionary:responseObject error:nil]; 

所以我有2個問題:我怎樣才能使這項工作?而且,我應該如何得到「拇指」值的相同?我看到它是一個嵌套塊,我認爲這可能更成問題。

我希望你能幫我解決這個問題。提前致謝!

+0

你可以從responseObject作爲字典發佈對象嗎? –

+0

@ReinierMelian你的意思是用於指令嗎?它顯示了每個人的關鍵:消息,成功,項目。 –

回答

0

您必須聲明與JSON數據完整的關鍵路徑:

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

爲了解析拇指你可以使用關鍵路徑"item.thumb.src"。但是,更好地創造單獨的類是這樣的:

//Thumb.h 
@interface Thumb : MTLModel <MTLJSONSerializing> 
@property (copy, nonatomic) NSURL *src; 
@end 

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

然後用Item旁邊變化:

//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

感謝您的回覆。但是我在另一篇文章(我現在找不到鏈接)中讀到,其中解釋了使用諸如「item.id」之類的點訪問值不起作用。但即使它起作用,我也需要首先解決其他問題,然後應用你的建議 –

+0

在[Mantle's](https://github.com/Mantle/Mantle)github頁面上有很好的例子。進入'@implementation GHIssue'後的下一段代碼使用了點:'... @「reporterLogin」:@「user.login」,...'。所以我認爲這是使用點的正常現象。 –

+0

好吧然後我會嘗試,謝謝@安德魯 –