I have a view controller, SubscribeVC which uses InAppPurchases service which is injected into it. The user initiates the purchase logic and during the process, StoreKit shows few UIAlertControllers regarding the purchase that is about to be made. On the view controller I hold strong reference to the (InAppPurchases) service, and calls a function which has a completion handler for when the purchase completes.
The problem is that when the user dismisses the StoreKit's alerts, it makes SubscribeVC to be reloaded (Which calls viewDidLoad etc.), and to the completion handler to cause EXC_BAD_ACCESS error (because it was released when the VC instance was) when completes.
I open SubscribeVC through AppDelegate and I also tried to hold a strong reference to the SubscribeVC instance from within the InAppPurchases service but nothing helps, SubscribeVC is still being reloaded some how.
What am I doing wrong? Any Ideas? Thanks!
Well apparently I instantiate the
UIViewControllerSubscribeVCfromapplicationDidBecomeActiveofAppDelegate. When StoreKit's alert was dismissed,applicationDidBecomeActivewas called again, reinstantiatedSubscribeVCand reassignedAppDelegate'swindow.rootViewControllerto the newly instantiated VC, which caused the original VC to be released from memory.The solution is to instantiate the view controller from
didFinishLaunchingWithOptions, which is being called once when the application launches.Hope it'll help someone.