2013-08-12 2 views
0

나는 그 안에 미리보기 이미지가있는 listview를 사용하고 있습니다. 나는 또한 모든 정보를 검색하는 webservice를 사용하고 있습니다.ios listview 행 인덱스가 꺼져있는 것 같습니다.

내 cellForRowAtIndexPath 메서드에서 서비스를 호출하여 레코드를 검색 한 다음 첨부 된 이미지가 있는지 확인합니다. 이것은 단지 불량배 일뿐입니다. 그런 다음 다른 메소드를 사용하여 서비스를 다시 호출하여 축소판을 가져옵니다. 논리는 모두 올바른 위치에 있고 올바른 순서로 보이지만 이미지는 잘못된 셀에 표시되고 복제됩니다.

코드를 디버깅 할 때 각 셀에 대한 서비스 호출이 시작되고 다음 행/셀로 이동하는 응답 작업으로 바로 이동하는 것처럼 보입니다. 모든 행이 채워지면 응답으로 이동합니다. 디버거에서 정상입니까? 어쩌면 서비스 호출이 비동기 적이기 때문에 그 이유가 무엇일까요? 비누 "라이브러리"가 포함되어 있지만 어디에도 이름이 붙여지지 않은 것처럼 보이며 비동기 요청을하는 것 같지 않습니다. 비동기 요청은이 응용 프로그램에 대해 멍청합니다. 제 3 자 개발사로부터이 프로젝트를 물려 받았습니다.

나는 또한 .net dev이고 Visual Studio 디버거에 익숙해 져서 어쩌면 몇 가지 문제가 발생합니다.

죄송합니다. 내 조건이 정확하지 않으면 ios 및 obj-c에 대해 상당히 새로운 것입니다.

코드 : 서비스 호출을 얻기 위해 이미지 :

[service GetPictureThumbnail:self action:@selector(GetThumbResponse:) clientid: [AppDelegate clientID] commid:[UserSettings getInstance].selectedID mod:@"CCR" pkey:_ccr.l maxWidth:94 maxHeight:98]; 

GetThumbResponse : 세포의

// Handle errors 
if([value isKindOfClass:[NSError class]]) { 
    NSLog(@"%@", value); 
} 

// Handle faults 
if([value isKindOfClass:[SoapFault class]]) { 
    NSLog(@"%@", value); 
} 


// Do something with the NSString* result 
Picture_Object* result = (Picture_Object*)value; 
NSLog(@"%@", result); 
[_cell.imgThumb setImage:[UIImage imageWithData:result.e]]; 

다른 모든 데이터는 잘하지만 이미지에 포함되지 않을 수있는 유일한 일이 서비스에 대한 초기 호출

감사합니다.

+0

'_cell'이란 무엇입니까? 그리고 어떤 오류 로그/예외가 보이나요? – Wain

+0

프로세스 중에 디버거를 사용하려고합니까? NSLog를 다운로드 시작, step2, step3, step4 등과 같이 넣으십시오.디버거없이 일반 모드에서 어떤 일이 발생하는지 확인하십시오. – iphonic

+0

_cell은 listview에있는 셀입니다. 나중에 getThumbResponse 액션에서 썸네일을 설정하기 위해 사용할 수 있도록 선언해야합니다. –

답변

1

제 경험에 따르면 cellForRowAtIndexPath :에서 처리하는 것이 좋지 않습니다.

위아래로 스크롤 할 때마다 셀이 새로 고쳐지고 그 방법이 반복적으로 호출되어 이상한 불일치가 발생합니다. 셀을 채우는 가장 좋은 방법은 (다시 말해, 모든 사람과 일치하지 않을 수도있는 내 경험에 기반하여) 셀에 표시 할 데이터를 보유하는 자신의 메서드에서 배열을 준비하는 것입니다. 그러면 cellForRow :를 호출하면 아래와 비슷한 데이터를 얻을 수 있습니다.

[imageArray objectAtIndex:[indexPath row]]; 

당신이 스크롤 아래로, 당신은 단지 당신의 배열에서 데이터를 따기 및 셀을 표시하는 대신 지속적으로 네트워크 요청을하고있는 그런 식으로.

나는이 방법으로 데이터를 처리하기 전까지 모든 문제를 겪었습니다. 내가 이전에 알고 있었으면 좋겠다. 슬픔을 많이 덜어 줬을 것이다.

이 질문에 대한 직접적인 대답이 아닐 수도 있지만 tableViews에 접근하는 더 좋은 방법입니다 (특히 셀/테이블보기가 복잡 해지면 특히 그렇습니다).

* 편집 : 네트워크 요청 후 아래 라인을 호출하고 배열로 데이터를 처리해야합니다.

[_tableView reloadData]; 
+0

이것은 좋은 생각 인 것 같습니다. 이 프로젝트에 포함 된 비누 라이브러리가 작업에서 추가 변수를 전달하는 것을 매우 어렵게 만드는 것처럼 보였습니다. 또한 통신의 비동기 특성으로 인해 이미지를 적절한 셀에 다시 할당하는 것이 어렵습니다. –

+0

추가 변수를 action에 전달하는 것이 어려워서 어떤 의미인지 모르겠습니다.하지만 비동기 성질의 경우에는 내 대답에서 편집 한 내용을 살펴보십시오. –

관련 문제