【问题标题】:TodayWidget openURL triggers multiple times application:openURLTodayWidget openURL 多次触发 application:openURL
【发布时间】:2014-09-12 14:50:24
【问题描述】:

我用 Tableview 编写了一个简单的 Today 扩展。 在didSelectRowAtIndexPath: 我打开我的应用程序:

[self.extensionContext openURL:url completionHandler:nil];

这在大多数情况下都很好用。 但有时(主要是当应用程序未在后台运行时)应用程序崩溃。 url 方案对我的应用来说并不新鲜,到目前为止效果很好。

我发现在这些情况下application:openURL:sourceApplication:annotation:applicationDidBecomeActive:会被触发多次。

是否有人遇到过同样的问题,或者可以观察到同样的行为?

【问题讨论】:

  • 从今日扩展打开应用程序时,我也遇到了奇怪的崩溃,特别是如果应用程序当时没有运行。我会尝试测试,看看你提到的这些方法是否被多次调用。

标签: ios cocoa-touch ios8 google-tag-manager


【解决方案1】:

我已经复制了这个,结果证明这是 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

如果应用程序是后台运行而不是终止,则不会观察到此行为。

这仍然是 iOS 8 或 Google 跟踪代码管理器中的错误,但与此同时,建议您从 AppDelegate 中删除 GTM 初始化代码,并改为在应用程序的其他位置执行此操作。

p>

【讨论】:

  • 谢谢,至少我知道我不是唯一有问题的人
  • 已提交错误报告,希望他们尽快修复
  • @PeterSchumacher - 我正在与 Apple 技术支持部门合作完成这项工作。从我的堆栈跟踪来看,对这些方法的第二次调用可能是由 Google 跟踪代码管理器触发的 - 您是否也在您的应用中使用 Google 跟踪代码管理器?
  • 是的,我也在使用它。你有更多关于它为什么或何时这样做的信息吗?
  • 是的,彼得。我已经更新了我的答案。如果可能,您需要将其从应用程序中删除:didFinishLaunchingWithOptions: 方法。
猜你喜欢
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多