【问题标题】:custom uitabelviewcell variable returns nil, IBOutlets works fine - Mailcore2自定义 uitabelviewcell 变量返回 nil,IBOutlets 工作正常 - Mailcore2
【发布时间】:2015-04-28 17:39:18
【问题描述】:

我有这个问题,无论我在自定义 uitabelviewcell 中放入什么变量“var”,它都会返回 nil 虽然 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()

那么它不是零,但仍然崩溃。我认为这是“插件”的问题?

【问题讨论】:

  • 你试过用 Obj-C 写代码吗?
  • 我尽力从 mailcore2 应用程序中的示例中复制代码,结果相同...我不知道为什么它不起作用

标签: uitableview swift tableviewcell mailcore2 mailcore


【解决方案1】:

由于您的 var 稍后会被初始化,您应该将其声明为可选 var messageRenderingOperation: MCOIMAPMessageRenderingOperation?,而不是像您当前声明的那样使用强制解包它。此外,如果您使用情节提要,您可以在 awake from 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
   }
}

【讨论】:

  • 啊,但它仍然返回 nil
  • 你可以尝试在 UITableViewCell awakeFromNib() 方法中初始化你的 var 吗?
  • erhm,我该怎么做?从未使用过 awakeFromNib()
  • hm 这让我有点困惑......应该是什么样的初始化?......我知道它需要初始化,但是在 = 之后应该是什么
  • 您必须完全按照您在 cellForRowAtIndexPath 方法中所做的操作: = self.imapSession.plainTextBodyRenderingOperationWithMessage(message, folder: "INBOX", stripWhitespace: false)
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多