Ios 如何从外部源更新uitextview。
我希望能够通过调用视图中的方法来更新uitextview。使用此代码,我得到一个运行时错误:Ios 如何从外部源更新uitextview。,ios,swift,uikit,uitextview,swift-playground,Ios,Swift,Uikit,Uitextview,Swift Playground,我希望能够通过调用视图中的方法来更新uitextview。使用此代码,我得到一个运行时错误: Unexpectedly found nil while unwrapping an Optional value 如果我注释掉它运行的vw.updateTerm(…)行。最后,我想用从BLE和/或http请求更新的数据更新uitextview。任何帮助或指导都将不胜感激 我的游乐场swift 3代码如下所示: import UIKit import PlaygroundSupport public
Unexpectedly found nil while unwrapping an Optional value
如果我注释掉它运行的vw.updateTerm(…)行。最后,我想用从BLE和/或http请求更新的数据更新uitextview。任何帮助或指导都将不胜感激
我的游乐场swift 3代码如下所示:
import UIKit
import PlaygroundSupport
public class TextViewController : UIViewController {
public var textView : UITextView!
override public func loadView() {
textView = UITextView()
textView.text = "Hello World!\nHello Playground!"
self.view = textView
}
func updateTerm(textToUpdate: String) {
self.textView.text.append(textToUpdate)
}
}
let vw = TextViewController()
vw.updateTerm(textToUpdate: "here you go")
PlaygroundPage.current.liveView = vw
问题是当您尝试
updateTerm
时,loadView
仍然没有被调用,这意味着对于vw
实例,textView
在loadView
中是nil
只要textView
声明为强制展开属性,则在nil
状态下使用该属性(如您的情况)的任何尝试都将导致运行时错误
您应该将其设置为常规可选:
public var textView : UITextView?
override public func loadView() {
textView = UITextView()
textView?.text = "Hello World!\nHello Playground!"
self.view = textView
}
func updateTerm(textToUpdate: String) {
self.textView?.text.append(textToUpdate)
}
或者,例如,惰性属性(如果适用于您的情况):
可以找到更多信息。谢谢,该链接有助于更好地解释。我使用了Lazy选项,它对运行时错误非常有效。我添加了几行,如下添加到我的文本视图中,它会更新,但文本永远不会显示到显示的文本视图中。[code]print(vw.textView.text)vw.updateTerm(textToUpdate:“\n你去哪里2”)print(vw.textView.text)“code”添加了这些代码行。我似乎有两个textView实例,因为在操场上它附加到一个实例,但不在显示的那个实例上。我需要在课堂上做更多的事情吗?
vw.updateTerm(textToUpdate:\n你去哪里)print(vw.textView.text)vw.updateTerm(textToUpdate:\n你去哪里2”)print(vw.textView.text)
lazy public var textView = UITextView()
override public func loadView() {
textView.text = "Hello World!\nHello Playground!"
self.view = textView
}
func updateTerm(textToUpdate: String) {
self.textView.text.append(textToUpdate)
}