2016-06-09 5 views
1

변수가있는 경우 배열에 추가하려는 간단한 루프가 있습니다. 모든 변수가 검사됩니다 ... 왜 이것이 충돌하는 지 압니까?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이다가

편집 : 중단 점을 추가하고 테스트를 더 잘 수행 할 수 있도록 코드를 약간 변경했습니다. 루프에서 충돌되지 않고 다음과 같습니다

enter image description here

하면 이미지에서 볼 수 있듯이, 나는 앱이 루프의 마지막 인덱스에 충돌 한 생각 때문에 10에서 시작 인덱스를 설정 한 . 배열은 마지막 인덱스에, 그리고 루프 휴식 있지만, 앱이 실행을 계속하고이 줄 끝에서 맞 충돌 :

doTableRefresh(tableView); 
+1

이 코드에는 2 개의 '배열'이 있습니다. TableData 행을 주석 처리하고 코드가 작동하는지 확인하여 문제의 원인을 좁히는 것이 좋습니다. 또한'if let' 줄에 중단 점을 놓고 모든 속성과 변수가 초기화되고 그 안에 예상되는 데이터가 있는지 확인하십시오. 짐작할 수 있다면 문제는'jsonArrData as [JsonArrayValues]'에있을 것입니다. – DJohnson

+0

맞습니다.이 코드 줄에는 아무런 충돌이 없지만이 줄의 코드가 필요합니다. 나는 값을 정했고 적어도 30 일이 지나면 괜찮을 것 같아 결국 거의 충돌해야합니다. 게시물을 업데이트하여 변수 선언 및 사용법을 보여주는 코드를 추가했습니다. – user3033437

답변

0

내가 문제가 어디에 있는지 찾아 관리하고, 그것은 아니었다 루프. 배열이 위의 루프에서 더 이상 채워지지 않았기 때문에 tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 파일에서 전역 배열에 액세스 했으므로 충돌이 발생했습니다. 많은 의견에 감사드립니다!