我用Tableview写了一个简单的今天扩展。
在didSelectRowAtIndexPath:
我打开我的应用程序:
[self.extensionContext openURL:url completionHandler:nil];
这在大多数情况下效果很好。 但有时(主要是当应用程序没有在后台运行时)应用程序崩溃。 网址方案对我的应用来说并不陌生,到目前为止一直运作良好。
我发现在这些情况下,application:openURL:sourceApplication:annotation:
和applicationDidBecomeActive:
会被多次触发。
有人有同样的问题,或者可以观察到同样的行为吗?
答案 0 :(得分:2)
我已经重现了这一点,结果却是iOS 8和Google跟踪代码管理器的问题。
通过技术支持事件与Apple工程师一起完成了这项工作,最新信息是当您的应用程序终止,然后从窗口小部件打开并且Google跟踪代码管理器通过调用其方法初始化时出现问题:
self.container = [future get];
在Google' getting started'页面,他们建议将此代码放入您的application:didFinishLaunchingWithOptions
方法。
但是,将代码放在这里显然会旋转UIKit运行循环,这意味着在AppDelegate
中,您将看到这两种方法连续两次被调用:
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url
如果应用程序是背景而不是终止,则不会出现此行为。
这仍然是TBC,这是iOS 8或Google跟踪代码管理器中的错误,但同时,建议您从AppDelegate中删除GTM初始化代码并在应用中的其他位置执行此操作代替。