有时当我在Facebook iOS登录流程完成后尝试将JS脚本注入UIWebView时,我的iOS应用程序在快速应用程序切换期间(从Safari到我的应用程序)被冻结。
在XCode控制台中,我收到以下错误消息:
等待10秒后无法返回。主运行循环 模式:kCFRunLoopDefaultMode ...
有时应用程序不会被冻结,但错误消息显示完全相同。
我通过在1秒的间隔后运行JS注入代码来解决这个问题。我按如下方式实现了它:
在FB会话更改的回调中,我使用NSObject
的{{1}}方法在1秒内调用我的JS回调。这是我的代码示例:
performSelector:withObject:afterDelay:
它有效,但我担心它不是一个可靠的解决方案。例如,在某些情况下,1秒可能还不够。
如何以更可靠的方式实现相同的效果?
答案 0 :(得分:0)
嗯,结果很简单。我使用UIApplicationState
,就像这样:
/*
* Callback for session changes.
*/
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error: (NSError *)error
{
switch (state) {
case FBSessionStateOpen:
if (!error) {
// We have a valid session
UIApplicationState appState = [[UIApplication sharedApplication] applicationState];
NSLog(@"We have a valid session, app state: %u",appState);
if (UIApplicationStateActive == appState){
[self jsCallback:session];
} else {
self.fbSessionJustOpened = YES;
}
}
break;
// the rest of the method is omitted
}
在UIApplicationDelegate
的{{1}}方法中:
applicationDidBecomeActive