2011-11-15 4 views
0

내 iPad 응용 프로그램에서 웹 서비스 (SOAP)의 데이터를 조회하는 스레드를 생성하고 있습니다. NSDictionary 멤버 개체를 사용하여 NSArray에 응답을 구문 분석합니다. 내 서비스를 호출하고 동 기적으로 구문 분석하면 예상대로 작동합니다. 이제 백그라운드 스레드를 시작하고 조회 스레드가 풀을 풀고 주 스레드의 UITableView가 데이터를 표시하려고하면 (reloadData가 호출 됨) 주 스레드에서 중단이 발생합니다.iOS : 조회 스레드의 NSAutoreleasePool에서 결과를 기본 스레드로 복사해야합니까?

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    ^------------- Thread 1: Program received signal: EXC_BAD_ACCESS 
    [pool release]; 
    return retVal; 
} 

내 생각에, 풀링 된 결과가 풀 배출에 의해 해제되었습니다. 한 영역에서 다른 영역으로 복사해야합니까? 그것은 큰 구조이고 사본은 비쌀 것입니다.

어떻게 내가 주 스레드에서 내 UITableView에 대한 데이터 소스를 안전하게 빌드하기 위해 백그라운드 스레드를 갖게 되었습니까?

답변

1

개체 스레드를 백그라운드 스레드에 유지 한 다음이를 사용하면 주 스레드에서 해제해야합니다.

0

스레드가 결과를 기본 스레드로 다시 전달하기 전에 스레드가 풀을 비우기 바로 전에 [NSObject performSelectorOnMainThread:withObject:waitUntilDone:]으로 전화해야합니다. 앱의 구조에 따라 NSObjectviewController이고 selectorviewController의 일부 메소드가 될 수 있습니다.

+0

스레드 요청을 한 개체에 대한 스레드에서 콜백이 이미 있습니다. 제 질문은 구문 분석 된 개체를 백그라운드 스레드에서 꺼내 주 응용 프로그램에서 안정적으로 유지하는 것입니다 (또는 ... 한 풀에서 다른 풀로 복사해야합니까? – mobibob

관련 문제