亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

致命錯誤:在展開可選值時意外找到零

致命錯誤:在展開可選值時意外找到零

當年話下 2019-07-09 13:33:06
致命錯誤:在展開可選值時意外找到零我用的是UICollectionView但當我試圖改變細胞標簽的文字時,我就明白了。    func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int{     return 5}func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell!{     var cell = collectionView.dequeueReusableCellWithReuseIdentifier("title", forIndexPath: indexPath) as TitleCollectionViewCell     // Next line: fatal error: unexpectedly found nil while unwrapping an Optional value    cell.labelTitle.text = "This is a title"     return cell}有人知道這件事嗎?
查看完整描述

3 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

幾乎可以肯定的是,您的重用標識符"title"是不正確的。

我們可以從UITableView.h方法簽名dequeueReusableCellWithIdentifier返回類型為隱式解封可選:

func dequeueReusableCellWithIdentifier(identifier: String!) -> AnyObject! // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.

這是由后面的感嘆號決定的AnyObject:

    AnyObject!

那么,首先要考慮的是,什么是“隱式解包可選”?

SWIFT編程語言告訴我們:

有時,從程序的結構中可以清楚地看到,在第一次設置該值之后,可選項總是有一個值。在這些情況下,每次訪問可選值時都需要檢查和打開它,因為可以安全地假定它一直都有一個值。

這類選項被定義為隱式展開選項。您可以通過放置感嘆號(字符串!)來隱式地編寫未包裝的可選項。而不是問號(字符串?)在要選擇的類型之后。

所以,基本上,在某一點上可能是零的,但從某一點開始,它就不再是零了。因此,我們把它作為未包裝的值,省去了一些麻煩。

在這種情況下dequeueReusableCellWithIdentifier返回這樣的值提供的標識符必須已用于注冊單元以便重用。提供一個不正確的標識符,去隊列找不到它,運行時返回一個不應該發生的零。這是一個致命的錯誤,應用程序崩潰,控制臺輸出提供:

fatal error: unexpectedly found nil while unwrapping an Optional value

底線:檢查.storyboard、XIB或代碼中指定的單元重用標識符,并確保它在退出隊列時是正確的。


查看完整回答
反對 回復 2019-07-09
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

您可以通過安全地展開包裝來防止崩潰的發生。cell.labelTitle帶著if let聲明。

if let label = cell.labelTitle{
    label.text = "This is a title"}

但是,您仍然需要進行一些調試,以了解為什么要在那里獲得一個零值。


查看完整回答
反對 回復 2019-07-09
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

檢查該單元格是否正在注冊。self.collectionView.registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String)..如果是,那么刪除這一行代碼。

有關更多信息,請參見此答案:為什么UICollectionViewCell的出口為零?

“如果你使用的是故事板,你不想叫它。它會覆蓋你的故事板?!?/em>


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 727 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號