【问题标题】:A loop causing NSRangeExceptionindex导致 NSRangeException 索引的循环
【发布时间】:2016-06-09 00:08:15
【问题描述】:

我有一个简单的循环,我想在其中将一个变量附加到一个数组(如果存在)。检查每个变量...有人知道为什么会崩溃吗?

这是我得到的错误:

NSRangeException', reason: '*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray

这是声明和使用数组的第一个循环:

private func parseJson(json : NSMutableArray, tableView : UITableView){
    var jsonArrData : [JsonArrayValues] = []
    var c : Int = 0
    for j in json {
        var jsonValues : JsonArrayValues = JsonArrayValues()
        //Create main value
        guard let value = j.valueForKey("value")?.valueForKey("value")! else{
            continue
        }
        //Get name
        guard let Name : String = (value.valueForKey("Name")?.valueForKey("en") as? String) else {
            continue
        }
        jsonValues.name = Name
        jsonArrData.append(jsonValues)        
        c += 1
    }    
    //Reorder Array by shop distance from user...
    jsonArrData.sortInPlace({$0.distance < $1.distance})
    //This is the loop that crashes:    
    for jsonVal in jsonArrData as [JsonArrayValues]{
        if let name : String = jsonVal.name where jsonVal.name.isEmpty == false{
            TableData.append(name)
        }        
    }
}

这是 jsonValues 类:

import Foundation
class JsonArrayValues  {

    init(){

    }
    var name : String = ""
    var distance = Float()
    var lat = Float()
    var lng = Float()
    var openingTime = String()
    var country = String()
    var code = String()
    var address = String()
    var categories = String()
    var city = String()
    var type = String()
    var brands = String()

}

编辑: 我添加了断点并稍微更改了代码以便能够更好地测试并且看起来没有在循环中崩溃:

正如您在图片中看到的,我将索引设置为从 10 开始,因为我认为应用程序在循环中的最后一个索引中崩溃了。数组它在最后一个索引中,循环中断,但应用程序继续执行并在此行之后崩溃:

doTableRefresh(tableView);

【问题讨论】:

  • 这段代码中有 2 个Arrays。我将通过注释掉 TableData 行并查看代码是否有效,将其缩小到导致问题的原因。还要在if let 行上放一个断点,看看你所有的属性和变量都被初始化了,并且里面有你期望的数据。如果我不得不猜测的话,问题可能出在jsonArrData as [JsonArrayValues]
  • 你是对的,当我评论这行代码时没有崩溃,但我需要这行代码。我已经设置了值,并且似乎它们会好起来,至少前 30 个,所以它必须在最后崩溃。我更新了帖子以添加一些代码来显示变量声明和用法

标签: swift loops swift2 xcode7 nsrangeexception


【解决方案1】:

我设法找出问题出在哪里,而且根本不在循环中。我正在从tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -&gt; UITableViewCell 文件访问一个全局数组,该数组不再从上面的循环中填充,所以它崩溃了。非常感谢cmets!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多