hmt*_*hur 1 multithreading cocoa-touch objective-c uikit
我有一个应用程序,它使用a UISearchBar根据用户输入从外部API动态搜索.
该应用正在搜索外部API并正确显示结果,但是当我从搜索结果中选择任何行时,屏幕会冻结,我收到此错误;
尝试从主线程或Web线程以外的线程获取Web锁定不应从辅助线程调用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];
}
bbu*_*bum 10
"尝试从主线程以外的线程获取Web锁定,或者不应该从辅助线程调用UIKit"
修复在概念上很简单; 不要从您的线程更新UI.
假设parseDidComplete消息来源于此,那么这样的东西将"起作用":
[delegate performSelectorOnMainThread: @selector(parseDidComplete) withObject: nil waitUntilDone: YES];
"工作"因为线程很难,这个答案完全忽略了你可能遇到的任何同步问题.
请注意,您最好使用NSOperation和NSOperationQueue.它们有很好的文档,并且有很多例子.