【问题标题】:Adding text to a textview using a function使用函数将文本添加到文本视图
【发布时间】:2017-07-19 01:36:26
【问题描述】:

我试图在不使用按钮的情况下将文本添加到文本视图,但我不断收到致命错误:在按下 aButton 时展开可选值 (lldb) 时意外发现 nil。该错误将我带到 myTextView.text = "" 行。到目前为止,我发现的关于错误的帖子就是这个“致命错误:在展开可选值时意外发现 nil”是什么意思?如果您的问题是一个已声明的变量,您可以使用 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()
  }
}

【问题讨论】:

  • 为什么ViewController().addText() ??为什么不self.addText()

标签: ios swift xcode


【解决方案1】:
fatal error: unexpectedly found nil while unwrapping an Optional value

可选值为 nil 表示您的 IBOutlet 弱变量“myTextView”为 nil,在 nil 上调用方法,这会使您的应用程序崩溃。

当您使用 StoryBoard 添加 textView 时,在您的插座连接或可用于名为“ViewController”的代码之前,它需要一些准备工作,例如从 nib 文件加载和创建对象

for more info about nib file

还有,因为你在一个新的 ViewController 对象中调用 addText 方法,即使完全没有错误,它也不会改变屏幕上的 textView,因为它们是不同的对象。就像@Bilal 所说,使用 self.addText() 或 addText() 就可以了。

最后,调试器是你最好的朋友

【讨论】:

  • 谢谢伙计,我已经在这里工作了一天左右,只是无法理解发生了什么。您以一种很有意义的方式为我简化了它。
  • 快速提问,如何从视图中调用 addText() 函数?
  • 您可以使用扩展功能,只需将 addText 方法添加到该视图的扩展块中,然后像 someView.addText() 一样调用它
  • 我这样做了,现在我在尝试解开 nil 时遇到了同样的老错误。这是我到目前为止得到的扩展 ViewController { func addText2() { myTextView.text = "" for words in textArray { myTextView.textStorage.append(NSAttributedString(string: words)) } } } class Slide: UIView { @IBAction func nobodyButton (_ sender: UIButton) { textArray.append("nobody") ViewController().addText2() } }
  • 通过扩展添加方法并不能让您免于零崩溃,即使您可以从视图中调用 addText 方法,但杀手的原因是 IBOutlet 没有准备好使用,为什么不调用 addText 方法ViewController 本身,如果您仍然感到困惑,Youtube 上的一些教程或 Apple 的编程指南可能真的对您有所帮助。 :)
【解决方案2】:

编写ViewController().addText() 意味着您正在创建类ViewController 的新实例,而不是应该使用self.addText()

【讨论】:

    【解决方案3】:
        @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!
    

    【讨论】:

      猜你喜欢
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      相关资源
      最近更新 更多