UISearchBar
을 사용하여 사용자 입력을 기반으로 외부 API에서 동적으로 검색하는 앱이 있습니다.보조 스레드에서 UIKit을 호출하면 안되는 오류 메시지
앱이 외부 API를 정밀하게 검색하고 결과를 올바르게 표시하지만 검색 결과에서 행을 선택하면 화면이 멈추고이 오류가 발생합니다.
보조 스레드 나는이 문제를 해결할 수있는 방법을 전혀 생각이 없다
에서 호출 할 수 없습니다 메인 스레드 또는 웹 스레드 UIKit가 아닌 다른 스레드에서 웹 잠금을 얻기 위해 시도 .
다음은 코드입니다.
- (void) run: (id) param {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL: [self URL]];
[parser setDelegate: self];
[parser parse];
[parser release];
[delegate parseDidComplete];
[pool release];
}
- (void) parseXMLFile: (NSURL *) url
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self setURL: url];
NSThread* myThread = [[NSThread alloc] initWithTarget:self
selector:@selector(run
object: nil];
[myThread start];
[pool release];
}
API 데이터를 어떻게 가져 옵니까? 다른 스레드에서 비동기 적으로 수행하는 것처럼 보입니다. UIKit은 스레드 세이프가 아니므로 UI 스레드는 항상 메인 스레드에서 수행되어야합니다. 관련 코드를 알려주시겠습니까? – Felix
다음은 코드입니다. - (공극), 실행 (ID) {PARAM NSAutoreleasePool 풀 * = [NSAutoreleasePool의 ALLOC] INIT]; NSXMLParser * 파서 = [NSXMLParser의 ALLOC] initWithContentsOfURL : 자기 URL]; [파서 setDelegate : 자기]; [parser parse]; [delegate parseDidComplete]; } - (void) parseXMLFile : (NSURL *) url { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; [self setURL : url]; NSThread * myThread = [[NSThread ALLOC] initWithTarget : 자기 선택 : @selector (실행 대상 : 전무] [시작 myThread] } – hmthur
를 외부 API 동안 화면이 정지되지 않도록 내가 스레드를 사용하고 액세스 할 수 있습니다. 그래서 내가 그렇게 할뿐만 아니라 해결할 UIKit 스레드 문제 ?? 을 BTW, 나는 (UIKit이 보조 스레드에서 호출 할 수 없습니다) – hmthur