2016-05-23 8 views
0

NSMutableDictionaryとAlomafire jsonの応答に奇妙な解析問題があります。swison NSMutableDictionaryの解析でjsonが失敗する

私はこれが失敗した理由を知らない
Alamofire.request(.POST, "\(Constants.apiUrl)/get_stuff", parameters: mapData, encoding:.JSON) 
    .responseJSON { response in 

     switch response.result { 
     case .Success(let data): 
      let info = data as! NSMutableDictionary 

      self.deleteCategoryFromCoreData() 

      if let categoryArray = info["category"] as? NSArray{ 
       for var i = 0; i < categoryArray.count; i++ { 
        self.categoryID = categoryArray[i]["id"] as? Int <-- error here 
        self.categoryName = categoryArray[i]["name"] as? NSString 
        self.saveCategoryDataToCoreData() 
       } 
      } 

(lldb) po categoryArray[i]["id"] 
2016-05-23 20:59:56.892 MyProject[9799:5005782] -[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000013 
error: Execution was interrupted, reason: internal ObjC exception breakpoint(-3).. 
The process has been returned to the state before expression evaluation. 

が、これは失敗しない:ここでは

(lldb) po categoryArray[i]["name"] 
▿ Optional<String> 
    - Some : "Animals" 

はデータです:

(lldb) po categoryArray[i] 
▿ 2 elements 
    ▿ [0] : 2 elements 
    - .0 : id 
    ▿ [1] : 2 elements 
    - .0 : name 
    - .1 : Animals 

私がアクセスなぜカント"id"キー?私はこのようなJSONを解析できませんか?私はSwiftyJSONを試すように言われました。この方法ではまったくできません。この問題はすべて、xcode 7.3およびcocoapods 1.0.0に更新した後に発生しました。ありがとう。助けてください ?

答えて

1

Foundationコレクションタイプにはタイプ情報が含まれておらず、NSMutableArrayNSMutableDictionaryの可変バージョンは、Swift対応のものとまったく関係しません。すべて

Alamofire.request(.POST, "\(Constants.apiUrl)/get_stuff", parameters: mapData, encoding:.JSON) 
    .responseJSON { response in 

    switch response.result { 
    case .Success(let data): 
     let info = data as! [String:AnyObject] 

     self.deleteCategoryFromCoreData() 

     if let categoryArray = info["category"] as? [[String:AnyObject]] { 
     for category in categoryArray { 
      self.categoryID = category["id"] as? Int 
      self.categoryName = category["name"] as? String 
      self.saveCategoryDataToCoreData() 
     } 
     } 

あなたはまだキーidの値よりもエラーが出た場合のための

使用スウィフトネイティブ型は文字列です

if let id = category["id"] as? String { 
    self.categoryID = Int(id) 
} 

PS:あなたが繰り返しですべての値を割り当てることを考えてみましょう同じ変数categoryIDcategoryNameにそれぞれループします。つまり、各反復で値が上書きされます。

関連する問題