iOS: 子视图控制器关闭导致 viewDidLoad 被再次调用

iOS: Child View Controller dismissal causes viewDidLoad to be called again

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

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

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

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

显然我从 AppDelegateapplicationDidBecomeActive 实例化了 UIViewController SubscribeVC。当StoreKit的alert被解除后,applicationDidBecomeActive又被调用了,重新实例化了SubscribeVC并且重新赋值了AppDelegate'swindow.rootViewController给新实例化的VC,导致原来的VC 从内存中释放。

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

希望它能对某人有所帮助。