2016-04-16 12 views
1

APIにアクセスしようとするときに、私は私のスウィフトコードで一般的な「失敗NSURLSession/NSURLConnection HTTP負荷(kCFStreamErrorDomainSSL、-9802)」の問題にエラーが生じています。しかし、NSAppTransportSecurityでinfo.plistの一般的な回避策を試してみると、「EXC_BAD_INSTRUCTION(コード= EXC_i386_INVOP、サブコード= 0x0)」が表示されます。以下は私のコードですが、私の人生では何が起こっているのか理解できません。ここでの援助は非常に高く評価されます。EXC_BAD_INSTRUCTION(コード= EXC_i386_INVOP、サブコード= 0x0の)クラッシュ

let jsonDict = try NSJSONSerialization.JSONObjectWithData(data2, options: NSJSONReadingOptions.MutableContainers) as! [String:Any] 

強制キャスト、as!が失敗している:

func getMoviesNowPlayingData(page:Int, completion: (dict: [String:Any]) ->()) { 

    let urlString : String = "https://api.themoviedb.org/3/movie/now_playing?api_key=ebea8cfca72fdff8d2624ad7bbf78e4c&page=\(page)" 
    let escapedUrlString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 
    let apiURL = NSURL(string:escapedUrlString!) 

    let session = NSURLSession.sharedSession() 

    session.dataTaskWithURL(apiURL!, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) in 
     //NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) occurs here 

     do { 
      if let data2 = data { 
       let jsonDict = try NSJSONSerialization.JSONObjectWithData(data2, options: NSJSONReadingOptions.MutableContainers) as! [String:Any] 
       //EXC_BAD_INSTRUCTION (code=EXC_i386_INVOP, subcode=0x0) crash occurs here 
       completion(dict: jsonDict) 
      } 
     } catch { 
      //handle NSError 
      print("error") 
     } 
    }).resume() 
} 
+0

@Robそれを指摘してくれてありがとう!私はまだスウィフトでキャスティングのハングを取得しています。 JSONは標準の辞書形式ですが、AnyとAnyObjectの違いは何ですか? – pennyloaf

+1

関連していませんが、私はあなたがちょうど戻っているスウィフト辞書にこれをキャストしているときに、なぜ可変コンテナを使用しているのかはっきりしていません。 JSONObjectWithDataのオプションとして '[]'を使うことをお勧めします。 – Rob

答えて

2

問題が書かれた行です。あなたができるのであれば、私は強制的なキャストの使用をお勧めしません。しかし、それが失敗した理由として、JSONは、クラス型が含まれているので、あなたはAnyObject、ないAny、例えばを使用する必要があります。上記のコメントで

guard let jsonDict = try NSJSONSerialization.JSONObjectWithData(data2, options: []) as? [String: AnyObject] else { 
    print("not a dictionary") 
    return 
} 

// use `jsonDict` here 

、あなたは、あなたがNSDictionaryにキャストしようとしたとき、それが失敗したことを示唆していますあまりにも。 JSONが辞書の場合、返されたオブジェクトNSDictionaryなので、キャストは失敗しないので、もう一度試してみることをお勧めします。私はあなたがそれを試みたときに起こっているいくつかの他の問題があったと思う。

関連する問題