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
UIViewController
SubscribeVC
fromapplicationDidBecomeActive
ofAppDelegate
. When StoreKit's alert was dismissed,applicationDidBecomeActive
was called again, reinstantiatedSubscribeVC
and reassignedAppDelegate's
window.rootViewController
to 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.