2016-09-22 7 views
0

今朝Crashlyticsでこのエラーが発生しましたが、問題の原因を突き止めることはできません。それについてのあなたの意見を得ることは素晴らしいでしょう。私はそれがマルチスレッドの問題である可能性が最も高いです。しかし、私は正確にポイントをピンすることができません。NSOperationQueueエラーCrashlyticsから把握しようとしています

enter image description here

編集:私は少し深く掘って、ここで失敗のコードです:

また、私はエラーがあることを考え出した:

は、型の値をキャストすることができませんでした " __NSSingleObjectArrayI '(0x1aa60bca0)を' NSMutableArray '(0x1aa60bd90)に設定します。 2016-09-22 08:29:34.136764 GrabbnGo [4204:822290]タイプ '__NSSingleObjectArrayI'(0x1aa60bca0)の値を 'NSMutableArray'(0x1aa60bd90)にキャストできませんでした。

これは完全にこのすべてしばらく働いていたし、それは突然の問題を引き起こしていると、アプリがストアにすでにある:/

json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as? [String: AnyObject] 
      let str = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print(str) 
      let OrderDictionary = json as NSDictionary 
      let result = OrderDictionary.objectForKey("result") as! NSMutableArray 
+1

ソースを表示していない理由がありますか? 521行周辺の文脈? – BaseZen

+0

ソースと実際のエラーメッセージを追加しました。最後の行は失敗している行です。 –

+0

'!'にクラッシュすることに基づく多くの素材があります。 '!'スウィフトプログラムのクラッシュの原因です。この質問は閉じなければなりません。キーワードを探す必要があります:「クラッシュを引き起こすアンラッピングを回避する/回避する方法/安全なアンラッピング/オプションのエラー処理」 – BaseZen

答えて

1

OK、この種のは、ユニークな答えを持っています。基本的に、あなたはNSJSONSerializationを誤用しています。それは最終的にあなたに噛まれる時限のバグです。文書によると

https://developer.apple.com/reference/foundation/jsonserialization

すべてのオブジェクトは、NSStringの、のNSNumber、NSArrayの、NSDictionaryの、またはnsnullをのインスタンスです。

これは非常に簡単で明確な文章です。あなたはそれを尊重するべきです。 NSMutableArrayについては何も言わず、NSArrayだけです。 JSONパーサーは、そのように選択したNSArrayに互換性のある(サブクラス)オブジェクトを使用しています。配列内にアイテムが1つしかない場合は、内部のタイプ__NSSingleObjectArrayが速度とメモリの両方でより効率的であるようです。

result(今はたぶんいつも?)には1つの項目しか含まれていないので、JSONパーサーはあなたとは異なる選択をしました気になるはずです。

あなたがやらなければならないことは、NSArrayに変更し、あなたが本当に必要な場合は、それからNSMutableArrayを構築です:

let myJSONParsedArray: NSArray = ... 
let myMutableArray = NSMutableArray(myJSONParsedArray) 

しかし、最初は力のアンラップは、特にネットワークコードの環境で、とても危険である理由について学び、あなたがタイプと価値と悪意とに関して全くデータを信頼できないときは、これまでにない!

+0

ありがとうございました。これは本当に助けになりました。これを修正するために、更新が店舗に向かいます。 :) –

関連する問題