gpt4 book ai didi

ios - iPhone 6 模拟器上的 indexPath.row 计算不正确,但 4s/5/5s/6plus 上不正确

转载 作者:行者123 更新时间:2023-11-30 14:08:10 25 4
gpt4 key购买 nike

indexPath.row 在 iPhone 6 上计算不正确,但在任何其他模拟器上计算不正确,如下所示。 iOS 部署目标设置为 8.0。当您从(且仅从)第四个选项卡单击分段控件中的第二个选项卡时,会发生此计算。

这是应用程序崩溃的地方:

func createCompletedCell(indexPath: NSIndexPath) -> CompletedCell {
var cell = tableView.dequeueReusableCellWithIdentifier(profileCompletionId) as! CompletedCell
println("indexPath.row: \(indexPath.row)")
println("indexPath.row-2: \(indexPath.row-2)")
var completion = switchState == 1 ? completionArr[indexPath.row-2] : favArr[indexPath.row-2] //crashes on this line

cell.setCompletedCell(completion)
return cell
}

调用者:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 {
var cell = tableView.dequeueReusableCellWithIdentifier("ProfileDetails", forIndexPath: indexPath) as! ProfileDetails
cell.selectionStyle = UITableViewCellSelectionStyle.None //No background color if cell is clicked
return cell
}
else if indexPath.row == 1 {
var cell = tableView.dequeueReusableCellWithIdentifier("SegControl", forIndexPath: indexPath) as! ProfileSegControl
cell.segControl.selectedSegmentIndex = switchState
cell.segControl.addTarget(self, action: Selector("changeState:"), forControlEvents: UIControlEvents.ValueChanged)
return cell
}
else {
if(switchState == 0 || switchState == 2){
return createBountyCell(indexPath)
}
else {
return createCompletedCell(indexPath)
}
}
}

当我在 iPhone 6 模拟器上打印 indexPath.row 变量时,单击第四个分段控制选项卡,然后单击第二个,我得到输出:

(4th tab calcs)    
indexPath.row: 2
indexPath.row-2: 0
indexPath.row: 3
indexPath.row-2: 1
(2nd tab calcs)
indexPath.row: 3
indexPath.row-2: 1

当我使用 iPhone 4s/5/5s/6plus 执行相同操作时

(4th tab calcs)    
indexPath.row: 2
indexPath.row-2: 0
indexPath.row: 3
indexPath.row-2: 1
(2nd tab calcs)
indexPath.row: 2
indexPath.row-2: 0

问题是,当我单击第二个选项卡时,indexPath.row 应该设置为 2,但却设置为 3。

最佳答案

你的逻辑有问题。考虑一下你的代码的大纲。首先你说:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 { // ...
}
else if indexPath.row == 1 { // ...
}
else {
if(switchState == 0 || switchState == 2){ // ...
}
else {
return createCompletedCell(indexPath)
}
}
}

好的。那么当你调用createCompletedCell时,这个索引路径是什么?你不知道!你忘了测试一下。相反,您测试一些完全不同的东西 - 关于 switchState 的东西,我没有基础对此做出任何假设。因此,此时的 indexPath 行可以是除了 0 或 1 之外的任何数字(因为如果它是其中之一,我们现在就已经返回了)。

所以如果它是 2,你不应该感到惊讶,因为你的逻辑允许这种可能性。你的错误是稍后假设它不可能是2,因为显然它可以是。

关于ios - iPhone 6 模拟器上的 indexPath.row 计算不正确,但 4s/5/5s/6plus 上不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com