2017-01-04 16 views
0

自分のビュー内でメソッドを呼び出すことで自分のuitextviewを更新できます。このコードでは、ランタイムエラーが発生します。外部ソースからuitextviewをアップデートする方法。

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 

答えて

0

問題はtextViewがためloadViewnilであることを意味している、あなたはupdateTermしようとしているときloadViewはまだ現時点で呼ばれていないということですvwインスタンス。

textViewが強制unwrappedプロパティとして宣言されている限り、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オプションを使用しました。テキストビューに追加するには、次のように2行追加しました。ただし、テキストは表示されたテキストビューには表示されません。 [コード] print(vw.textView.text) print(vw.textView.text) 'code' – user7376605

+0

これらのコード行が追加されました。私は2つのインスタンスのtextViewを持っているようです。なぜなら、プレイグラウンドでは1つのインスタンスに追加されていて表示されているインスタンスには追加されていないからです。私のクラスでもっと何かする必要がありますか? 'vw.updateTerm(textToUpdate: "あなたが行ったところで" ) vw.updateTerm print(vw.textView.text) ' – user7376605

関連する問題