我的代码是从本地.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利默里克\
答案 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