2016-03-29 15 views
0

クラスIは、以下の変数を定義: 'のviewDidLoad' でシグナルによるコマンドが失敗しました:セグメンテーションフォルト:TableViewControllerのため11ですか?私の 'DictionaryTableViewController:のUITableViewController' は、

var dataObj : [String: AnyObject]! 
var letters : Int! 
var currentSection : Int!; 
var currentRow : Int! 

を私は持っている:

let jsonUrl = NSBundle.mainBundle().URLForResource("dictionary", withExtension: "json") 
    var data = NSData(contentsOfURL: jsonUrl!) 
    func dataReturn(object: [String: AnyObject]) { 
     dataObj = object 
     letters = object["collection"]!.count 
    } 

    do { 
     let object = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 
     if let dictionary = object as? [String: AnyObject] { 
      dataReturn(dictionary) 
     } 
    } catch { 
     // Handle Error 
    } 

これは私が引っ張っていJSONファイルの基本構造であります私はのtableViewセルスタイルを行くときNSBundle

{ 
     "collection": [{ 
      "letter": "A", 
      "words": [{ 
       "word" : "Apple", 
       "definition" : "Tasty fruit" 
      }] 
     },{ 
      "letter": "B", 
      "words": [{ 
       "word" : "Banana", 
       "definition" : "Meh, not bad." 
      }] 
     },{ 
      "letter": "C", 
      "words": [{ 
       "word" : "Carrots", 
       "definition" : "hooock twooo!" 
      }] 
     }] 
    }  

からでだから今私は、このエラーの原因となっているものであると信じて:

Command failed due to signal: Segmentation fault: 11

  1. While emitting SIL for 'tableView' at /Users/me/Desktop/.../DictionaryTableViewController.swift:70:14

警告として、私はxcode 7.3にアップデートしたばかりの警告を出しています。この問題は、からなることをエラーが言うところから7.2

ライン70に存在していなかった読み取ります

Line 70: override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) 
     //let currentSelection = dataObj["collection"]![indexPath.section]["words"]!![indexPath.row]! 
     let currentSelection = dataObj["collection"]![indexPath.section]["words"]!![indexPath.row]!!! 
     cell.textLabel?.text = currentSelection["word"] as? String 
     cell.detailTextLabel?.text = currentSelection["definition"] as? String 
     return cell 
    } 

注:上記のコードではコメントアウト行はXcodeの7.2で正常に働いていました。 Xcode7.3は私に構文エラー(下付き文字のあいまいな使用)を与えました。コメントアウトされた行のすぐ下にあるコードは、構文エラーを起こさない私の変更です。これが私の問題を引き起こしているのでしょうか?私は本当にここで敗北しており、答えを見つけることができないようです。どんな助けもありがとう!

+0

それはまったく恋愛だよ!あなたはその行に進んでいる。条件付きでJSON辞書の各要素のアンラップを試み、何かが 'nil'であればメッセージを出力しましたか?それは物事が間違っているところを教えてくれるかもしれません... –

+0

私は同意して、それは私には意味がありませんが、それは構文エラーが発生しない構文です。私はあなたの提案を試していないが、ブレークダウンを理解するためにそれを試して単純化しなければならないかもしれない。 – user3612986

答えて

1

デバッグのために、私はこのようなガードの一連のステートメントにすべての力、開封されたoptionalsとその行を打破するでしょう:これらのいずれかの場合にはそのような

guard let collection = dataObj["collection"] else { fatalError("collection is nil") } 

guard let words = collection[indexPath.section]["words"] else { fatalError("words is nil") } 

guard let word = words[indexPath.row] else { fatalError("word is nil") } 

何か、とにかく、あなたを教えてくれます力を掛けられていない選択肢が問題を引き起こしていました。

+0

それを信じているかどうかは分かりませんが、それだけでうまくいきました!あなたは魔術師です!ありがとう@ローマン – user3612986