2017-01-04 73 views
0

我想通過調用我的視圖中的方法來更新我的uitextview。有了這個代碼,我得到一個運行時錯誤:如何從外部來源更新uitextview。

Unexpectedly found nil while unwrapping an Optional value 

如果我註釋掉vw.updateTerm(...)線運行。最終,我想用BLE和/或http請求更新數據來更新uitextview。任何幫助或方向將不勝感激。

我的遊樂場迅速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 

回答

0

的問題是,loadView仍然不能當你試圖updateTerm的那一刻,這意味着textViewloadViewnilvw實例。

只要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 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) 
} 

更多信息,可以發現here

+0

謝謝,鏈接幫助解釋更好。我使用了適用於運行時錯誤的Lazy選項。我添加了幾行如下添加到我的文本視圖,它更新,但文本從來沒有使它顯示文本視圖。 [code] print(vw.textView.text) vw.updateTerm(textToUpdate:「\ nhere you go 2」) print(vw.textView.text)'code' – user7376605

+0

添加了以下這幾行代碼。看起來我有兩個textView實例,因爲在操場中它附加到1個實例,但不是顯示的實例。我需要在班上做更多的事情嗎?'vw.updateTerm(textToUpdate:「\ nhere you go」) print(vw.textView.text) vw.updateTerm(textToUpdate:「\ nhere you go 2」) 打印(vw.textView.text)' – user7376605