在iPhone上快速EXC_BAD_ACCESS但不在模拟器上

时间:2015-03-02 17:08:16

标签: ios iphone swift

我正面临一个问题,这个问题必须深入iOS8 - 或者我已经监督了一些问题 明显的问题。欢迎任何帮助。

说明 在已经创建了一个JobTableViewController,它在一个表中显示一个作业列表(文件名)及其作业状态 标签和细节标签。

screenshot

如果用户选择一个条目,则此作业的更多详细信息将显示在下一个控制器中,并可在以下页面中更改。在回归 对于此控制器,应更新作业状态并显示在详细信息标签中。我已经在不同的模拟器中测试了应用程序,它正在按预期工作。

但如果我在iPhone上运行该应用程序,它就会崩溃      EXC_BAD_ACCESS(代码1,地址= ...) //每次运行时地址都在变化 正在访问 m_jobListStatus 。如果添加了println()语句,则打印正常。该应用程序总是在第二次返回此控制器时崩溃。

class JobTableViewController: UITableViewController {

  // some private vars here
  private var m_jobListStatus = [String:String]()

  override func viewDidLoad() {
   …
   if let s = m_defaults.dictionaryForKey(CONSTANTS.JOB_LIST_STATUS) as? [String:String] {
        m_jobListStatus = s
   }
}
…
  // update the status in the table, save the status in the system defaults file and save the changes in file
  override func viewDidAppear(animated: Bool) {      
    if let file = m_filename {
        println("\nin ViewDidAppear m_jobListStatus = \(m_jobListStatus) , \(checkJobStatus(file)), \(file)")
        self.m_jobListStatus[file] = checkJobStatus(file)    //     < < < < - - - - - -  C r a s h     is here
        m_defaults.setObject(m_jobListStatus, forKey: CONSTANTS.JOB_LIST_STATUS)
        tableView.reloadData()
        var json = MeterReading.saveToJSON(m_readingList)
        json?.writeToFile(CONSTANTS.DOCS_DIR + file, atomically: true)
        m_filename = nil
    }
  }
…
}

println的输出看起来像预期的那样:

  ViewDidAppear中的

m_jobListStatus =   [Auftrag-2015-03-01_12.17.39.meters:在Bearbeitung,   Auftrag-2015-02-27_20.36.33.meters:Neu],Neu,   定做-2015-02-27_20.36.33.meters

     ViewDidAppear中的

m_jobListStatus =   [Auftrag-2015-03-01_12.17.39.meters:在Bearbeitung,   Auftrag-2015-02-27_20.36.33.meters:Neu],在Bearbeitung,   定做-2015-03-01_12.17.39.meters

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

发现问题。它看起来像那样

NSUserDefaults.setObject(m_jobListStatus, forKey: CONSTANTS.JOB_LIST_STATUS)

是原因。看起来它正在将 m_jobListStatus 变为不可变。