我有四个制表符控制器,其中一个在视图控制器中有一个UIWebView。我创建了一个新的线程,以便在应用程序启动时在我的webView中加载Web内容,因此当Web加载完成后,用户可以在选择它们到视图控制器时进行查看。
我的问题是,webVIew根本没有在新创建的线程中加载请求,但是当我在viewDidLoad中放入loadRequest时它正在工作。我花了一整天的时间来找到解决方案,但根本没有运气。
这是我的代码:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
[NSThread detachNewThreadSelector:@selector(doStuff) toTarget:self withObject:nil];
return self;
}
- (void)doStuff
{
NSLog(@"Starting a new thread ...");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
url = [NSURL URLWithString:@"http://www.myURL.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[newsWebView loadRequest:request];
[pool release];
}
有人可以解决我的问题吗?非常感谢你。
答案 0 :(得分:2)
- (void)doStuff
{
NSLog(@"Starting a new thread ...");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
url = [NSURL URLWithString:@"http://www.myURL.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[newsWebView loadRequest:request];
});
[pool release];
}
答案 1 :(得分:1)
UIWebView是UIKit的一部分,因此您应该在主线程上运行。
- (void)doStuff
{
NSLog(@"Starting a new thread ...");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
url = [NSURL URLWithString:@"http://www.myURL.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
dispatch_async(dispatch_get_main_queue(), ^(void){
[newsWebView loadRequest:request];
});
[pool release];
}
答案 2 :(得分:-1)
试试这个
func loadPdfFromDocumentDirectory(localPathUrl: URL)
{
let urlRequest = URLRequest(url: localPathUrl)
DispatchQueue.main.async {
self.webView?.loadRequest(urlRequest)
}
}