我正在尝试从回调块内部推送视图控制器。我想要推送的视图控制器包含一个UIWebView,它抱怨我应该在主线程上调用它。我尝试使用NSInvocation无济于事。如何在主线程上调用presentModalViewController:animated
?
[vc requestUserPermissionWithCallback:^(BOOL inGranted)
{
if (inGranted)
{
if (serviceType == PXServiceTypeTwitter)
{
//[ad.rootViewController presentModalViewController:vc animated: YES]; // crashes
NSInvocation *invocation = [NSInvocation invocationWithTarget:ad.rootViewController selector:@selector(presentModalViewController:animated:) retainArguments:YES, vc, YES];
[invocation invokeOnMainThreadWaitUntilDone:NO]; // same result
}
}
else
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
}];
错误消息:
bool _WebTryThreadLock(bool),0x6b21090:尝试从主线程或Web线程以外的线程获取Web锁。这可能是从辅助线程调用UIKit的结果。现在崩溃......
我使用的是NSInvocation+CWVariableArguments类别。
答案 0 :(得分:8)
只需使用dispatch_get_main_queue()
获取主线程,然后发送给它:
dispatch_async(dispatch_get_main_queue(), ^{
// whatever code you want to run on the main thread
});
答案 1 :(得分:0)
我有类似的问题并使用了
performSelectorOnMainThread:withObject:waitUntilDone:
解决它。希望有所帮助。