![](/img/trans.png)
[英]Program crashes on a specific value when i try to free() the arrays in a pointer array
[英]Swift iOS. Program crashes when i try to mutate an array of buttons
我有大约20个链接到allKeys
按钮。 我希望turnRed按钮将其文本的颜色更改为红色。 我尝试了以下代码:
@IBOutlet var allKeys: [UIButton]!
@IBAction func turnRed(sender: UIButton) {
var i = allKeys.count
repeat {
allKeys[i].setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
i -= 1
} while i != -1
}
当我按下turnRed按钮时,程序崩溃,xcode跳至appDelegate文件,并突出显示AppDelegate类,错误为Thread1:signal SIGABRT。
控制台显示“由于未捕获的异常'NSRangeException而终止应用程序,原因:NSArrayI objectAtIndex
这里的问题是,您将变量i
设置为allKeys.count
,但是由于swift中的数组从零开始,因此第二十个元素实际上应该是allKeys[19]
。 因此,当循环在i = 20
,它将尝试访问allKeys[20]
,这会使应用程序崩溃。
解决此问题的一种方法是将i
设置为allKeys.count - 1
,但是更好的方法是使用for-in
循环而不是repeat
。
for key in allKeys {
key.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
}
在Swift中有多种循环方法,您应该使用这些选项以发挥自己的优势。 您可以在此处找到Apple的Control Flow文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.