致命错误数组索引超出范围

时间:2016-04-10 09:53:11

标签: arrays swift

我的代码是从本地.txt文件获取信息(姓名,纬度,经度和城市)。它工作正常直到某些行,然后给出这个"数组索引超出范围错误"在某些行。下面是我的代码和txt文件:

let path = NSBundle.mainBundle().pathForResource("wifi (1)", ofType: "txt")
let filemgr = NSFileManager.defaultManager()
if filemgr.fileExistsAtPath(path!){
    do{
        let fullText = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
        let readings = fullText.componentsSeparatedByString("\n")
        for i in 1..<readings.count{
            let data = readings[i].componentsSeparatedByString("\t") as [String]
            dictClients["name"] = "\(data[0])"
            dictClients["lat"] = "\(data[1])"
            dictClients["lng"] = "\(data[2])"
            dictClients["city"] = "\(data[3])"

            arrayClients.addObject(dictClients)
            print(dictClients["name"])
        }
    }catch let error as NSError{
        print(error)
    }
}

.txt文件的示例(它将在新月线的BB上切出):

  

Sky Court Shopping Shannon -8.8818377 52.710461 Clare \ Perys Hotel   Limerick -8.6484363 52.6629662 Limerick \ BBs Jetland Shopping   中心-8.6966707 52.6734915 Limerick \ Statoil   Caherdavin -8.6456267 52.6650273 Limerick \ BBs The Crescent Shopping   中心-8.6480104 52.6405294利默里克\

2 个答案:

答案 0 :(得分:2)

看起来你的文件有一些空行 - 最后可能是这样。你需要防范这一点。

此外,dictClients似乎是您多次添加到arrayClients的共享对象。修复异常后,这会产生意外行为 - 所有条目都将匹配最后一个条目。您应该通过在每次循环迭代中创建一个新字典来修复它:

for str in readings {
    let data = s.componentsSeparatedByString("\t") as [String]
    // Skip lines that do not contain exactly four tokens
    if (data.count != 4) {
        continue
    }
    let dict [String:String] = {
        "name" : data[0]
    ,   "lat"  : data[1]
    ,   "lng"  : data[2]
    ,   "city" : data[3]
    }
    arrayClients.addObject(dict)
    print(dict["name"])
}

答案 1 :(得分:0)

问题在这里for i in 1..<readings.count 如果读取数组为空,但循环始终以索引1开始,这就是为什么它显示错误。你应该从0开始你的循环,比如

for i in 0..<readings.count