由于信号命令失败:分段错误:11由于TableViewController?

时间:2016-03-29 18:48:04

标签: json xcode swift

在我的' DictionaryTableViewController中:UITableViewController' class I定义以下变量:

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

在' viewDidLoad'我有:

    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
    }

这是我从NSBundle

中提取的JSON文件的基本结构
    {
        "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!"
            }]
        }] 
    }    

所以现在当我为tableView单元格设置样式时,我认为这是导致此错误的原因:

  

命令因信号失败:分段错误:11

     
      
  1. 为表格'发出SIL' at / Users / me / Desktop /.../ DictionaryTableViewController.swift:70:14
  2.   

作为警告我刚刚在更新到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给了我一个语法错误(不明确使用下标)。注释掉的行下方的代码是我的更改,不会产生语法错误。这是导致我的问题的原因吗?我在这里真的很茫然,似乎无法找到答案。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

出于调试目的,我会将所有强制解包的选项分解为一系列这样的一系列保护语句:

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") }

无论如何,这样的事情会告诉你其中一个强行解开的选项是否导致问题。