iOS: закрытие дочернего View Controller вызывает повторный вызов viewDidLoad - PullRequest
0 голосов
/ 18 октября 2019

У меня есть контроллер представления, SubscribeVC, который использует сервис InAppPurchases, который внедряется в него. Пользователь инициирует логику покупки, и во время процесса StoreKit показывает несколько UIAlertControllers относительно покупки, которая должна быть сделана. На контроллере представления у меня есть сильная ссылка на сервис (InAppPurchases), и он вызывает функцию, которая имеет обработчик завершения для завершения покупки.

Проблема заключается в том, что когда пользователь отклоняет предупреждения StoreKit, он делаетSubscribeVC должен быть перезагружен (который вызывает viewDidLoad и т. Д.), И обработчику завершения вызвать ошибку EXC_BAD_ACCESS (потому что она была освобождена, когда был экземпляр VC) после завершения.

Я открываю SubscribeVC через AppDelegate, и я также пытался удерживать сильную ссылку на экземпляр SubscribeVC из службы InAppPurchases, но ничего не помогает, SubscribeVC все еще каким-то образом перезагружается.

Что я делаю не так? Есть идеи? Спасибо!

1 Ответ

0 голосов
/ 18 октября 2019

Ну, очевидно, я создаю экземпляр UIViewController SubscribeVC из applicationDidBecomeActive из AppDelegate. Когда предупреждение StoreKit было отклонено, applicationDidBecomeActive был вызван снова, повторно создан SubscribeVC и переназначен AppDelegate's window.rootViewController на новый экземпляр VC, что привело к освобождению исходного VC из памяти.

Решение состоит в том, чтобы создать экземпляр контроллера представления из didFinishLaunchingWithOptions, который вызывается один раз при запуске приложения.

Надеюсь, это кому-нибудь поможет.

...