2015-03-02 100 views
-1

我面臨的一個問題,必須深入iOS8 - 或者我已經監督了一些 明顯的問題。歡迎任何幫助。swift EXC_BAD_ACCESS在iPhone上,但不是在模擬器上

說明: 在已經創建了一個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 = [定做-2015-03-01_12.17.39.meters

:在Bearbeitung, 定做-2015-02- 27_20.36.33.meters:NEU],NEU, 定做-2015-02-27_20.36.33.meters

在ViewDidAppear m_jobListStatus = [定做-2015-03-01_12.17.39.meters

:在Bearbeitung, 定做-2015-02-27_2 0.36.33.meters:NEU],在Bearbeitung, 定做-2015-03-01_12.17.39.meters

任何想法?

在此先感謝

回答

0

發現問題。它看起來像

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

是原因。它看起來像是將m_jobListStatus變爲不可變的。

相關問題