在新线程中加载 UIWebView 内容
Posted
技术标签:
【中文标题】在新线程中加载 UIWebView 内容【英文标题】:Load UIWebView content in new thread 【发布时间】:2012-08-08 04:53:25 【问题描述】:我有四个选项卡控制器,其中一个在视图控制器中有一个 UIWebView。当应用程序启动时,我创建了一个新线程来在我的 webView 中加载 web 内容,因此当 web 完成加载后,当用户通过 tab 键进入视图控制器时,它就可以查看了。
我的问题是,webVIew 根本没有在新创建的线程中加载请求,但是当我将 loadRequest 放入 viewDidLoad 时它正在工作。我花了整整一天的时间来找到解决方案,但一点运气都没有。
这是我的代码:
- (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];
有人可以解决我的问题吗?非常感谢。
【问题讨论】:
我想你在这里有几个问题。如果你要尝试这个,你需要了解 threading。 UIKit 对象不是线程安全的,这是一个完美的例子。 那么,有什么方法可以实现我的目标吗?另一个问题是,当我在 viewDidLoad 函数和 [super viewDidLoad] 之前在主线程中运行 loadView 时,我的 viewController 处于空白屏幕; 【参考方案1】: - (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];
【讨论】:
【参考方案2】: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];
【讨论】:
【参考方案3】:试试这个
func loadPdfFromDocumentDirectory(localPathUrl: URL)
let urlRequest = URLRequest(url: localPathUrl)
DispatchQueue.main.async
self.webView?.loadRequest(urlRequest)
【讨论】:
以上是关于在新线程中加载 UIWebView 内容的主要内容,如果未能解决你的问题,请参考以下文章
在 UIWebview 中加载 Javascript+Html 内容
在 UITableViewCell 中加载 UIWebView 并根据 UIWebview 的内容制作 UITabViewCell 的高度