Пользовательская переменная uitabelviewcell возвращает nil, IBOutlets работает нормально - Mailcore2

У меня есть эта проблема, независимо от того, какую переменную "var" я положил в пользовательский uitabelviewcell, он возвращает ноль, в то время как IBOulets работает просто отлично

tableviewcell.swift

import Foundation
import UIKit
class tableViewCell: UITableViewCell  {

@IBOutlet weak var tableViewLabelDate: UILabel!
@IBOutlet weak var tableViewLabelDisplayName: UILabel!
@IBOutlet weak var tableViewLabelSubject: UILabel!
@IBOutlet weak var tableViewTextViewInfo: UITextView!
var messageRenderingOperation: MCOIMAPMessageRenderingOperation!

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

}

tableview.swift

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell2: tableViewCell = tableView.dequeueReusableCellWithIdentifier(reuseTableViewCellIdentifier, forIndexPath: indexPath) as tableViewCell
            cell2.tag = 0
             let message: MCOIMAPMessage = mailbox?.messages[indexPath.row] as MCOIMAPMessage!
            let uidKey = message.uid
            cell2.tableViewLabelDisplayName?.text = mailbox?.messages[indexPath.row].header.from.displayName
           cell2.tableViewLabelSubject?.text = mailbox?.messages[indexPath.row].header.subject
            println("Got the subject line: \(mailbox?.messages[indexPath.row].header.subject)")

            cell2.messageRenderingOperation = self.imapSession.plainTextBodyRenderingOperationWithMessage(message, folder: "INBOX", stripWhitespace: false)

            cell2.messageRenderingOperation?.start({ (plaintext: String!, error: NSError!) -> Void in   // Crash at this line
                if error != nil{
                    println("ERROR at messageRenderingOperation\(error)")
                }else {
                cell2.tableViewTextViewInfo.text = plaintext
                cell2.messageRenderingOperation = nil
                }
            })

            return cell2

}

он падает на этой линии

cell2.messageRenderingOperation?.start({ (plaintext: String!, error: NSError!) -> Void in   // Crash at this line

ОБНОВИТЬ

Я попробовал это также

class tableviewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
var messageRenderingOperation: MCOIMAPMessageRenderingOperation?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
self.messageRenderingOperation = imapSession.plainTextBodyRenderingOperationWithMessage(message, folder: "INBOX")
self.messageRenderingOperation.start({ (plaintext: String!, error: NSError!) -> Void in
                if error != nil{
                    println("ERROR at messageRenderingOperation\(error)")
                }else {
                cell2.tableViewTextViewInfo.text = plaintext
                    cell2.messageRenderingOperation = nil
                }
            })
}

}

ОБНОВЛЕНИЕ 2

сейчас, если я использую

var messageRenderingOperation = MCOIMAPMessageRenderingOperation()

тогда это не ноль, но все еще падает. я думаю это проблема с "плагином"?

1 ответ

Поскольку ваш var инициализируется позже, вы должны объявить его необязательным var messageRenderingOperation: MCOIMAPMessageRenderingOperation? и не использовать силу, чтобы развернуть его, как вы заявили в настоящее время. Также, если вы используете раскадровку, вы можете инициализировать ее в методе пробуждения от nib

class tableViewCell: UITableViewCell  {

    @IBOutlet weak var tableViewLabelDate: UILabel!
    @IBOutlet weak var tableViewLabelDisplayName: UILabel!
    @IBOutlet weak var tableViewLabelSubject: UILabel!
    @IBOutlet weak var tableViewTextViewInfo: UITextView!
    var messageRenderingOperation: MCOIMAPMessageRenderingOperation?

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

   }

   override func awakeFromNib() {
    super.awakeFromNib()

    self.MCOIMAPMessageRenderingOperation = //some initialization
   }
}
Другие вопросы по тегам