当在两个嵌套子类中调用super.viewDidLoad()时,我得到了Swift无限循环

我正在编写一个用Swift编写的iOS应用程序。 我有一个UITabBarController的子类,然后是一个嵌套的子类:

class HWTabBarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() ... } } class MainTabBarController: HWTabBarController { override func viewDidLoad() { super.viewDidLoad() ... } } 

这在iOS模拟器中工作正常,甚至当我在我的iPhone上debugging应用程序。 但是,当我存档应用程序并使用TestFlight将其发送到我的手机时,它会崩溃。

我的崩溃日志充满了这个无限循环:

 22 HDWR 0x00145e10 @objc HDWR.MainTabBarController.viewDidLoad (HDWR.MainTabBarController)() -> () (MainTabBarController.swift:16) 23 HDWR 0x00262867 NRMA__voidParamHandler 24 HDWR 0x0014ea00 HDWR.HWTabBarController.viewDidLoad (HDWR.HWTabBarController)() -> () (HWTabBarController.swift:24) 25 HDWR 0x00145e10 @objc HDWR.MainTabBarController.viewDidLoad (HDWR.MainTabBarController)() -> () (MainTabBarController.swift:16) 26 HDWR 0x00262867 NRMA__voidParamHandler 27 HDWR 0x0014ea00 HDWR.HWTabBarController.viewDidLoad (HDWR.HWTabBarController)() -> () (HWTabBarController.swift:24) 28 HDWR 0x00145e10 @objc HDWR.MainTabBarController.viewDidLoad (HDWR.MainTabBarController)() -> () (MainTabBarController.swift:16) 29 HDWR 0x00262867 NRMA__voidParamHandler 30 HDWR 0x0014ea00 HDWR.HWTabBarController.viewDidLoad (HDWR.HWTabBarController)() -> () (HWTabBarController.swift:24) 31 HDWR 0x00145e10 @objc HDWR.MainTabBarController.viewDidLoad (HDWR.MainTabBarController)() -> () (MainTabBarController.swift:16) 32 HDWR 0x00262867 NRMA__voidParamHandler 33 HDWR 0x0014ea00 HDWR.HWTabBarController.viewDidLoad (HDWR.HWTabBarController)() -> () (HWTabBarController.swift:24) 

什么是voidParamHandler指令,为什么它返回到MainTabBarController.viewDidLoad

我在这里做错了什么? 或者这是一个在Swift中的错误?

你在你的应用程序中使用New Relic吗? (我从所有那些NRMA__voidParamHandler引用猜测你是。)我有这个确切的问题。 我禁用了New Relic SDK,并从Testflight下载构build停止崩溃。 我还没有报告错误,但你/我/我们可能应该。

随着所有的甜蜜的dynamicfunction查找objective-c的join已经结束了。 要获得该function,您需要将“dynamic”声明标志添加到New Relic乐器的所有方法中。

喜欢这个:

 class HWTabBarController: UITabBarController { override dynamic func viewDidLoad() { super.viewDidLoad() ... } } class MainTabBarController: HWTabBarController { override dynamic func viewDidLoad() { super.viewDidLoad() ... } } 

更多细节,包括哪些function,这里包括: https : //docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile/getting-started/enabling-swift-interaction-traces

我刚刚下载了回购协议,在我自己的个人资料上签了字,一切似乎按照您的程序进行。 没有无限循环,没有崩溃。 这也是通过testing飞行。 这使我相信你的系统上有一些错误。 我build议做一些事情…

  1. 清理你的build cmd + alt + shift + k &&删除手机上的应用程序。
  2. closuresXcode然后删除您的派生数据。 (如果你还没有做到这一点,我可以扩展如何做到这一点。)
  3. 如果可行的话,将它注册为新的应用程序。

我的想法是,它会帮助你删除你的派生数据,但我会这样做,所以你知道一切都干净。 再次,我没有遇到这个问题在任何阶段:模拟器,从Xcode直接安装或通过testing飞行下载。

还要确保套件ID已经正确注册,并且Test Flight上的服务器端都是正确的。 我无法想象为什么它会导致一个循环,但这是一个奇怪的情况,让我们看看会发生什么。 :^)