2016-10-14 40 views
0

我曾經在主故事板中設計自定義單元格,並且一直運行良好,直到我試圖在外部「xib」文件中設計它。
我發現它更容易設計,設置約束條件等。
很顯然,這兩種方式都有一個UITableViewCell類。
我爲新的xib做了所有新的IBOutlets,Xcode沒有顯示任何錯誤,一切看起來都很好,而且工作得很好。

但是,晚會結束了與在xib中設計的自定義UITableViewCell有nil's

fatal error: unexpectedly found nil while unwrapping an Optional value

self.photo.image = photo

class CellForMessages: UITableViewCell { 
@IBOutlet weak var photo: UIImageView! 
@IBOutlet weak var name: UILabel! 
@IBOutlet weak var surname: UILabel! 
@IBOutlet weak var count: UILabel! 

override func prepareForReuse() { 

    self.photo = nil 
    self.name.text = nil 
    self.surname.text = nil 
    self.count.text = nil 
} 

func fillWithContent(photo: UIImage, name: String, surname: String, count: Int) { 
    self.photo.image = photo 
    self.name.text = name 
    self.surname.text = surname 
    self.count.text = String(count) 
} 

控制器文件擁有所有的東西,如:

let cell = tableView.dequeueReusableCell(withIdentifier: "messagesProfileCell", for: indexPath) as! CellForMessages 
cell.fillWithContent(photo: image!, name: self.profiles[indexPath.item].userName!, surname: profiles[indexPath.item].userSurname!, count: count) 

我甚至嘗試添加這段代碼,但有些人告訴我,這是沒有必要的,可以刪除水貨,
但我試過了,錯誤依然存在。

tableView.register(CellForMessages.self, forCellReuseIdentifier: "messagesProfileCell") 

所有網點都是最新的,並在主界面設置了故事板標識。

我錯過了什麼?
我不想回到老式的電池設計方式。

謝謝!

+0

此行self.photo = UIImageView()似乎是錯誤的 – zombie

+0

根據@ zombie告訴self.photo = UIImageView()的插座已經有一個內存。如果你想更好地設置imageView ka圖像。 –

回答

0

您正在覆蓋由您的文件所有者在您的XIB中加載的UIImageViewself.photo = UIImageView()。您應該將imageView的圖像設置爲零。

@IBOutlet weak var photo: UIImageView? 
@IBOutlet weak var name: UILabel? 
@IBOutlet weak var surname: UILabel? 
@IBOutlet weak var count: UILabel? 

override func prepareForReuse() { 

    super.prepareForReuse() 

    self.photo?.image = nil 
    self.name?.text = nil 
    self.surname?.text = nil 
    self.count?.text = nil 
} 

您可以添加?您網點年底,使他們可選的,因此如果其中一人(無論何種原因)都爲零,它不會崩潰。這意味着在使用您的任何網點時,您必須在名稱後面使用?,例如self.photo?.image = nil

+0

不幸的是,它沒有效果 –

+0

檢查我更新的答案 – Callam

+0

我做了打印(配置文件)的硬調試,沒有丟失的數據。那麼你的意思是,當它們顯然沒有數據時,它可能會在第一次加載時崩潰? –