我有一個UITableViewController
通過NSFetchedResultsController
從核心數據加載條目。就像這樣:Swift:處理意外的零值,當變量不是可選的時
let historyItem = fetchedResults.objectAtIndexPath(indexPath) as HistoryItem
historyItem
有這樣定義的title
屬性:
@NSManaged var title: String
所以在cellForRowAtIndexPath
代碼說
cell?.textLabel?.text = historyItem.title
而且都應該罰款。 title
不是可選的,不需要解包。
但是,在過去,存儲的核心數據已經獲得了一些對象,其中title
屬性的值是nil
。他們在那裏存儲,等待導致錯誤。如果其中一個對象顯示在單元格中,我將在上面的Swift代碼行中看到運行時地址異常,其中地址爲0.
爲了健壯性,我需要編寫代碼以確保存儲的數據已交付到我的程序不會導致崩潰。但是,我不能寫
if historyItem.title == nil { } // gives compiler error
因爲title
不是可選的,編譯器不會讓我。如果我寫
let optionalTitle:String? = historyItem.title
我仍然在該行上得到運行時EXC_BAD_ACCESS
。
我怎樣才能檢查title
是不是錯誤的零?
謝謝!
我已經關閉作爲重複,因爲我認爲這是同樣的問題。讓我知道如果這些解決方案不適用於你的情況,那麼我會重新提出這個問題。 – 2015-03-13 10:57:36
是的,這是完全相同的情況(我沒有找到我的搜索),但高標記的解決方案無法正常工作。我會問另一個問題指出。謝謝! – emrys57 2015-03-13 11:04:59
我問另一個問題在http://stackoverflow.com/questions/29031080/swift-detecting-an-unexpected-nil-value-in-a-non-optional-at-runtime-casting-a – emrys57 2015-03-13 11:30:37