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];
}
Run Code Online (Sandbox Code Playgroud)
bbu*_*bum 10
"尝试从主线程以外的线程获取Web锁定,或者不应该从辅助线程调用UIKit"
修复在概念上很简单; 不要从您的线程更新UI.
假设parseDidComplete消息来源于此,那么这样的东西将"起作用":
[delegate performSelectorOnMainThread: @selector(parseDidComplete) withObject: nil waitUntilDone: YES];
Run Code Online (Sandbox Code Playgroud)
"工作"因为线程很难,这个答案完全忽略了你可能遇到的任何同步问题.
请注意,您最好使用NSOperation和NSOperationQueue.它们有很好的文档,并且有很多例子.
| 归档时间: |
|
| 查看次数: |
4886 次 |
| 最近记录: |