2016-01-13 72 views
-1

我正在研究textViewDidChange中的字数功能。只要我输入它崩溃。当我粘贴一个句子时,调试器显示它获得了单词计数,但是在将计数添加到带有致命错误的按钮标题时它崩溃了:意外地在解包可选值时发现了零。斯威夫特字数致命错误

func textViewDidChange(textView: UITextView) { 
    let wordCount = textView.text.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).count 
    let words = String(format: "%d", wordCount) 

    countButton.title = "\(words)" 
} 
+1

检查您的countButton IBOutlet已正确连接。 – Moritz

+0

最后一行代码行中的count是多少? – vadian

+0

这是一个错字,改为单词。 countButton是以编程方式创建的。 – mrcrowley

回答

0

确保您countButton是非nil(检查插座连接)。

此外,字符串插值中的变量count似乎没有被定义 - 也许是一个伊维尔仍然是nil

编辑

事实证明,你countButton其实nil和编程方式创建。我怀疑一个定义,像这样:

weak var countButton : UIButton! 

以及像这样初始化:

self.countButton = UIButton() 

的问题是的话,那将weak修饰符告诉系统不会保留对象的所有权。因此,它会在创建后立即解除分配。

试试这个:

let button = UIButton() 
self.view?.addSubview(button) 
self.countButton = button 
+0

那么,@matt是正确的关于你的问题的警告部分,我选择忽略:你永远不会改变'wordCount',所以它不需要是可变的。 – SmokeDispenser

+0

按钮确实是零。 'if countButton!= nil countButton.title =“字数:\(words)” }其他{ print(“countButton is nil”) }该按钮是以编程方式在inputAccessoryView中创建的,创建了Outlet。 – mrcrowley

+0

如果是以编程方式创建的,请确保ARC在您将其添加为子视图之前立即将其解除分配,从而避免咬你的屁股。 – SmokeDispenser

0

The variable wordCount also has a warning saying it was never mutated, consider changing it to let. I assumed var was the was the way to go since the count would change

计数可能会改变。但变量wordCount的值将从改为,至少在代码显示。你创造它的唯一一件事就是打印它。因此,它应该是一个let变量,如编译器所示。