我试图遍历一个名字数组来获取某个字符串的索引。然后我想将我的UIPicker的索引设置为所述字符串。
我有以下代码但是这会导致应用程序崩溃:
let index = self.nameArray.index(where: {$0 == assetArray[0].Owner })
scroll_owners.selectRow(index ?? 0, inComponent: 0, animated: true)
调试时索引的索引值为6176573120,当然不在我的UIPicker范围内,导致崩溃。
关于为什么会发生这种情况的任何想法?
使用建议的答案会引发以下错误:
unrecognized selector sent to instance 0x101134af0'
assetArray [0]中肯定存在与正在传递的名称匹配的内容。
尝试单独运行以下代码行进行更多调查会产生同样的错误:
scroll_owners.selectRow(0, inComponent: 0, animated: true)
这是否意味着我错过了委托方法?
资产数组和名称数组:
var assetArray : [Asset] = []
var nameArray = [String]()
编辑:
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
self.scroll_owners.delegate = self
self.scroll_owners.dataSource = self
我试图以另一种方式实现这一点 - 我知道这是一种丑陋的做法我只是想看看为什么接受的快捷方式不起作用:
var i : Int = 0
while (nameArray[i] != name)
{
print(nameArray[i])
i=i+1
}
scroll_owners.selectRow(i, inComponent: 0, animated: true)
由于索引超出范围,这部分代码崩溃并且永远不会输入while循环 - 这是否意味着问题可能出在nameArray上?
答案 0 :(得分:1)
我认为问题是.index不会返回IndexPath。 但selectRow需要indexPath作为参数。
答案 1 :(得分:0)
我已经设法以稍微不同的方式解决了这个错误。
在我填充nameArray和UIPicker的函数中,我放置了以下代码:
var i : Int = 0
while (self.nameArray[i] != name)
{
print(self.nameArray[i])
i=i+1
}
self.scroll_owners.selectRow(i, inComponent: 0, animated: true)
代码崩溃的原因是由于nameArray在我尝试进行比较之前没有完成填充。我知道这可能不是公认的快捷方式,但它有效。
问题是由于我相信在单独的线程上运行函数引起的。