변수가있는 경우 배열에 추가하려는 간단한 루프가 있습니다. 모든 변수가 검사됩니다 ... 왜 이것이 충돌하는 지 압니까?NSRangeExceptionindex를 야기하는 루프
입니다 오류가 나는 얻을 :
NSRangeException', reason: '*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray
이 배열 선언과 사용되는 첫 번째 루프 :
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()
}
:
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이다가
편집 : 중단 점을 추가하고 테스트를 더 잘 수행 할 수 있도록 코드를 약간 변경했습니다. 루프에서 충돌되지 않고 다음과 같습니다
하면 이미지에서 볼 수 있듯이, 나는 앱이 루프의 마지막 인덱스에 충돌 한 생각 때문에 10에서 시작 인덱스를 설정 한 . 배열은 마지막 인덱스에, 그리고 루프 휴식 있지만, 앱이 실행을 계속하고이 줄 끝에서 맞 충돌 :
doTableRefresh(tableView);
이 코드에는 2 개의 '배열'이 있습니다. TableData 행을 주석 처리하고 코드가 작동하는지 확인하여 문제의 원인을 좁히는 것이 좋습니다. 또한'if let' 줄에 중단 점을 놓고 모든 속성과 변수가 초기화되고 그 안에 예상되는 데이터가 있는지 확인하십시오. 짐작할 수 있다면 문제는'jsonArrData as [JsonArrayValues]'에있을 것입니다. – DJohnson
맞습니다.이 코드 줄에는 아무런 충돌이 없지만이 줄의 코드가 필요합니다. 나는 값을 정했고 적어도 30 일이 지나면 괜찮을 것 같아 결국 거의 충돌해야합니다. 게시물을 업데이트하여 변수 선언 및 사용법을 보여주는 코드를 추가했습니다. – user3033437