2017-07-19 65 views
0

我想將文本添加到textview而不使用按鈕,並且不斷收到致命錯誤:當按下aButton時意外地發現nil,同時展開可選值(lldb)。該錯誤將我帶到myTextView.text =「」行。我發現的關於迄今爲止的錯誤的帖子是這一個什麼「致命錯誤:意外地發現零,而解包可選值」是什麼意思?如果你的問題是一個聲明的變量,你可以通過使用if let方法來解決這個問題,但是當涉及向textview添加文本時,答案會變得更加困難。使用函數向文本視圖中添加文本

class ViewController: UIViewController 
{ 
var textArray: [String] = [] 
@IBOutlet weak var myTextView: UITextView! 
    func addText() 
{ 
    myTextView.text = "" 

    for words in textArray 
    { 
    myTextView.textStorage.append(NSAttributedString(string: words)) 
    } 
} 
@IBAction func aButton(_ sender: Any) 
    { 
    textArray.append("a ") 
    ViewController().addText() 
    } 
} 
+3

爲什麼'視圖控制器()。addText()'?爲什麼不''self.addText()' – Bilal

回答

0
fatal error: unexpectedly found nil while unwrapping an Optional value 

可選的值爲零意味着你IBOutlet中弱變量「myTextView」的新實例是零,在nil上調用方法會導致應用程序崩潰。

,你用故事板添加TextView的,它需要一些準備工作您的出口連接或可用到您的代號爲「視圖控制器」,如負載和筆尖文件中創建對象之前

for more info about nib file

更重要的是,因爲您在新的ViewController對象中調用addText方法,即使沒有任何錯誤,它也不會更改屏幕上的textView,因爲它們是不同的對象。就像@Bilal所說的,使用self.addText()或addText()就可以。

最後,debuger是你最好的朋友

+0

謝謝你,現在我已經呆了一天左右,無法理解發生了什麼。你以一種非常有意義的方式爲我簡化了它。 – Drak

+0

快速問題,我如何從視圖中調用addText()函數? – Drak

+0

您可以使用擴展功能,只需將addText方法添加到該視圖的擴展塊中,然後將其稱爲someView.addText() – vg0x00

0

ViewController().addText()意味着你正在創建你的類視圖控制器,而不是你應該使用self.addText()

0
@IBOutlet weak var txtView: UITextView! //your textView 
    var textArray: [String] = [] 

    func addText() //function 
     { 
      txtView.text = "" //your textView 
      for words in textArray 
      { 
       txtView.textStorage.append(NSAttributedString(string: words)) 
      } 
     } 


    //Action 

    @IBAction func btnClick(_ sender: UIButton) { 

      textArray.append("a ") 
      addText()//call your function 
    } 

I hope, its work for you! 
相關問題