【问题标题】:iOS: Child View Controller dismissal causes viewDidLoad to be called againiOS:子视图控制器解除导致再次调用 viewDidLoad
【发布时间】:2020-02-15 11:24:30
【问题描述】:

我有一个视图控制器SubscribeVC,它使用注入到其中的 InAppPurchases 服务。用户启动购买逻辑,在此过程中,StoreKit 很少显示UIAlertControllers 关于即将进行的购买。在视图控制器上,我持有对 (InAppPurchases) 服务的强引用,并调用一个函数,该函数在购买完成时具有完成处理程序。

问题是,当用户关闭 StoreKit 的警报时,它会使 SubscribeVC 重新加载(调用 viewDidLoad 等),并导致完成处理程序导致 EXC_BAD_ACCESS 错误(因为它在 VC 时被释放实例是)何时完成。

我通过 AppDelegate 打开SubscribeVC,我还尝试在 InAppPurchases 服务中保持对SubscribeVC 实例的强引用,但没有任何帮助,SubscribeVC 仍在以某种方式重新加载。

我做错了什么?有任何想法吗?谢谢!

【问题讨论】:

    标签: ios dismissviewcontroller


    【解决方案1】:

    显然我从AppDelegateapplicationDidBecomeActive 实例化了UIViewController SubscribeVC。当 StoreKit 的警报被解除时,再次调用 applicationDidBecomeActive,重新实例化 SubscribeVC 并将 AppDelegate's window.rootViewController 重新分配给新实例化的 VC,这导致原始 VC 从内存中释放。

    解决方案是从didFinishLaunchingWithOptions 实例化视图控制器,它在应用程序启动时被调用一次。

    希望它会帮助某人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多