2013-09-01 3 views
1

새로 고침을하는 데 매우 이상한 버그가 있습니다. 내 테이블에 대한 내 데이터를 새로 고치는 기능이 있습니다. 새로 고침을 위해 viewWillAppear에 붙여 넣으면 호출됩니다. 이 동일한 기능은 후자에 대해 완벽하게 작동하지만 새로 고침 할 때 충돌합니다. 여기에 내 '재설정'기능이 있습니다.테이블을 새로 고침 할 때 충돌이 발생합니다.

-(void)reset{ 
    refreshList = nil; 
    isFiltered = NO; 
    currentRoom = nil; 
    [roomList removeAllObjects]; 
    NSMutableURLRequest *newRequest=[NSMutableURLRequest requestWithURL: 
     [NSURL URLWithString:@"http://192.168.1.128:8080/DJService/room/list/"] 
          cachePolicy:NSURLRequestUseProtocolCachePolicy 
         timeoutInterval:60.0]; 
    [newRequest setHTTPMethod:@"POST"]; 
    refreshList = [[NSURLConnection alloc] initWithRequest:newRequest 
                delegate:self]; 
} 

이제 풀을 실행하여 새로 고침을 할 때 수행하는 작업이 여기에 있습니다. 그것은 바로이 라인에 cellForRowAtIndexPath 기능과 충돌로 이동 :

room = [roomList objectAtIndex:indexPath.row]; 

roomList가 비어 아직 채워되지 않았기 때문에 그것은 충돌입니다. 내가 이해할 수없는 것은 왜 reloadData이 아직 호출되지 않았을 때이 함수로 갈 것인지입니다. 위의 코드에서 URL 연결을 통해 새 데이터를 가져온 다음 테이블을 connectionDidFinishLoading에 다시로드해야하지만이 함수는 호출되지 않습니다. 사실 내 테이블 또는 URL 연결에 대한 다른 대리자 함수는 호출되지 않습니다. 그것은 바로 cellForRowAtIndexPath으로 가고 빈 목록을로드하려고 시도합니다 .... 왜이 일을하고 있습니까?

정확히 똑같은 기능 (reset)이 viewWillAppear에서 호출되었으며 정상적으로 작동합니다.
더 혼란스럽게 만드는 것은 내 테이블에 7 개 이상의 요소가있을 때만 발생합니다 (화면을 채우는 것)

답변

4

roomList의 캐시를 유지하여 업데이트하고 있음을 알 수 있습니다. 데이터가 최신 상태가 아님을 나타냅니다. 화면을 채울 때 cellForRowAtIndexPath를 호출하는 이유는 화면 밖으로 셀을 dequeueing하기 때문입니다. 나는 끌어낼 데이터가없는 테이블을 남겨 두지 않을 것입니다. 또한 제어기를 새로 고치기 위해 pull을 작성하지 않은 경우, reloadTable을 호출 중일 수 있습니다.

+2

감사합니다. 연결이 완료 될 때까지 객체를 제거한 위치가 변경되었습니다. –

관련 문제