2017-07-19 64 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!