我正面临一个问题,这个问题必须深入iOS8 - 或者我已经监督了一些问题 明显的问题。欢迎任何帮助。
说明 在已经创建了一个JobTableViewController,它在一个表中显示一个作业列表(文件名)及其作业状态 标签和细节标签。
如果用户选择一个条目,则此作业的更多详细信息将显示在下一个控制器中,并可在以下页面中更改。在回归 对于此控制器,应更新作业状态并显示在详细信息标签中。我已经在不同的模拟器中测试了应用程序,它正在按预期工作。
但如果我在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
有什么想法吗?
提前致谢
答案 0 :(得分:0)
发现问题。它看起来像那样
NSUserDefaults.setObject(m_jobListStatus, forKey: CONSTANTS.JOB_LIST_STATUS)
是原因。看起来它正在将 m_jobListStatus 变为不可变。