我的一个班级中有以下代码。
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
parkCode = tableView.cellForRowAtIndexPath(indexPath).text
RTATab.codeText.text = parkCode.substringToIndex(3)
RTATab.codeLetter.text = parkCode.substringFromIndex(3)
self.dismissModalViewControllerAnimated(true)
}
上面引用的RTATab
是我创建的另一个类(类型UIViewController
),在该类中我已将其声明为全局类,如下所示,因为我需要访问一些文本字段( codeText
和codeLetter
)在其视野中。
import UIKit
import messageUI
import CoreData
import QuartzCore
var RTATab : ViewController = ViewController()
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
//some code
}
运行此操作时,我在行can't unwrap optional.none
上收到RTATab.codeText.text = parkCode.substringToIndex(3)
错误。
有人可以帮忙。我是否需要在viewController类中使用初始化器?
由于
答案 0 :(得分:0)
您收到此错误的单元格文本为nil
。在调用parkCode上的方法之前,必须先检查它是否为nil:
let possibleParkCode = tableView.cellForRowAtIndexPath(indexPath).text
if let parkCode = possibleParkCode {
RTATab.codeText.text = parkCode.substringToIndex(3)
RTATab.codeLetter.text = parkCode.substringFromIndex(3)
}
答案 1 :(得分:0)
parkCode
或RTATab.codeText
不存在(nil
)。您需要在解除引用其中任何一个之前检查它们的存在。
override func tableView (tableView: ...) {
if let theParkCode = tableView.cellForRowAtIndexPath(indexPath).text {
parkCode = theParkCode;
if let theCodeText = RTATab.codeText {
theCodeText.text = parkCode?.substringToIndex(3)
}
if let theCodeLetter ... {
// ...
}
}
}
注意:上面的代码取决于ViewController
(RTATab
的类)如何为codeText
和codeLetter
声明其实例变量 - 我假设作为选择。
答案 2 :(得分:0)
您收到错误是因为RTATab.codeText
和RTATab.codeLetter
是nil
- 您初始化RTATab
的方式实际上并未将其属性与故事板中的文本字段。如果您真的只需要全局版本的视图控制器,则需要为其提供一个故事板ID并使用以下内容加载它:
var RTATab: ViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("RTA") as ViewController
但是,我的猜测是它是你已经在其他地方显示过的想要更新的视图控制器,在这种情况下你最好只设置一个可以保存“parkCode”值并拉出它们的数据结构在显示它们的时候回到正确的视图控制器。