- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在开发一个应用程序,由于某种原因数组自发清空。
我首先在文件顶部提到它:
let scaleTypes = [String]()
然后我填充它(我通过运行数组的 println 来验证它是否被填充):
let scaleTypes = scaleTypesDict.valueForKey("Types")! as! [String]
println(scaleTypes.count)
当我访问数组时(填充 UITableViewCells 的内容时):
cell.textLabel!.text = scaleTypes[indexPath.row]
我收到 fatal error :数组索引超出范围
。在访问数组之前,我已经直接对数组计数进行了 println,发现它本身已清空(打印 0)。该文件的其他地方未提及该数组。我在此应用程序的另一个 View Controller 中使用了类似的变量名称,但我非常怀疑这是导致问题的原因。有人有什么东西吗?
编辑:如果查看整个源代码有帮助,可以在这里找到:https://gitlab.carson-greene.com/cgreene/scales-ios/tree/dev/Scale%20Randomizer .不幸的是,我没有很好地评论事情;被警告。发生此错误的文件是 SRSettingsViewController.swift
文件。
最佳答案
您正在声明两个不同的变量,称为 scaleTypes
。
第一个是成员变量,因为你用 let
声明然后初始化为空,所以永远不会包含任何内容。
然后,在您的 viewDidLoad
中声明一个名为 scaleTypes
的新局部变量。您将值放入其中,但它仅在您的 viewDidLoad
函数运行时存在,它会屏蔽成员变量。当该函数退出时,它就会消失。
在其他函数的其他地方,当您访问 scaleTypes
时,您正在访问该空成员变量。
如果您改为使用 var
声明您的成员变量,然后将 let
放在 viewDidLoad
中赋值的前面,您将将值分配给您希望的成员变量。
关于ios - 数组自发清空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361846/
我是一名优秀的程序员,十分优秀!