У меня есть простое приложение, которое предлагает покупки в приложении для удаления рекламы и включает ряд дополнительных функций. В качестве фона, ViewController с именем InfoViewController
является делегатом приложения SKPaymentTransactionObserver
, а также отображает кнопку покупки, взаимодействует с iTunes Store, управляет процессом восстановления и т. Д. c.
. для распознавания прерванных транзакций я добавил TransactionObserver в свой AppDelegate
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
_infoVC = [[InfoViewController alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:_infoVC];
[...]
Если не был вызван транзакцияObserver AppDelegate
, приложение не распознает, когда iTunes Store отправляет элемент в paymentQueue to updatedTransactions
.
Для получения дополнительной информации InfoViewController
запускается пользователем, нажимающим UIButton, и [self performSegueWithIdentifier:@"segueToUpgrade" sender:self]
запускается из базового представления.
Это, кажется, вызывает некоторые проблемы, поскольку экземпляр InfoViewController
уже был инициализирован из AppDelegate.
И поэтому это вызывает проблему ниже по течению, когда я пытаюсь отобразить UIAlertController на InfoViewController
, но получает следующее предупреждение:
Warning: Attempt to present <UIAlertController: 0x1389f3800> on <InfoViewController: 0x139017680> whose view is not in the window hierarchy!
Удаление двух строк в didFinishLaunchingWithOptions
решает проблему, но не решает проблему приложения, не распознавать, когда iTunes Store отправляет элемент в paymentQueue на updatedTransactions
.
. Поэтому, как лучше всего убедиться, что AppDelegate
может добавить InfoViewController
в качестве transactionObserver
, при этом позволяя UIAlertController будет отображаться, как только пользователь действительно перейдет к InfoViewController
.
Я довольно новичок в этом, поэтому, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.