2013-05-27 8 views
0

Я создал приложение, которое содержит IAP (In App Purchase). Приложение построено с использованием UINavigationController. Когда пользователь решает приобрести контент, функция разблокировки разблокирует контент. Затем пользователь нажимает кнопку «Назад», и они возвращаются в главное меню, где они могут получить доступ к остальной части приложения. Все это прекрасно.разблокировать содержимое в UINavigationController

Моя проблема заключается в том, что, когда пользователь переходит к разблокированному viewController, который является частью UINavigationController, а затем возвращается к главной странице меню, приложение очистило свою память о том, что пользователь приобрел разблокированное содержание и (Я предполагаю) использует атрибут property.enabled = no;, который установлен в методе viewDidLoad этого начального основного меню viewController, чтобы повторно заблокировать контент при перезагрузке главной страницы.

Итак, мой вопрос: как я могу сообщить приложению, что пользователь купил контент в приложении, и сохранить разблокированный контент после того, как пользователь отклонился от страницы главного меню?

Я думаю, что, может быть, могу объявить BOOL appPurchased; в mainMenuViewController. Затем из недавно разблокированного viewControllers включите prepareForSegueMethod, который устанавливает BOOL в YES, который, в свою очередь, разрешает приобретаемый контент в операторе if.

Нечто подобное:

  1. объявить BOOL appPurchased; в mainMenuViewController.m после @implementation

  2. реализовать следующий метод в mainMenuViewController.m:

(void) viewWillAppear:(BOOL)animated { 
    if (appPurchased) { 
     [self enableLockedContent]; 
    } else if (!appPurchased){ 
     nil; 
    }  
} 
  1. В UnlockedContentViewController, реализовать следующий метод, который подключен к UIButton:
(IBAction)toMainMenu:(id)sender { 
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *mainMenu = [mainStoryboard instantiateViewControllerWithIdentifier:@"cover"]; 
    [self.navigationController pushViewController:mainMenu animated:YES]; 
} 

Я не могу понять, как писать MainMenuViewController.appPurchase =YES; в приведенном выше способе (IBAction)toMainMenu:(id)sender.

Является ли эта конфигурация отправкой значения BOOL обратно в mainViewController где-нибудь рядом с работой? Есть ли способ лучше?

+0

Как насчет использования функции покупки восстановления для непотребимого товара? http://stackoverflow.com/questions/7761556/restore-already-bought-in-app-purchases-on-iphone –

+0

Я не хочу, чтобы пользователю приходилось восстанавливать содержимое каждый раз, когда они вернутся в главное меню.Мне нужно найти способ, чтобы контент оставался разблокированным все время, если устройство не выключено или что-то в этом роде. – RunnerGirl

ответ

1

Вы можете отдать свой UIViewController быть MainMenuViewController (и тогда вы будете иметь возможность установить свойство appPurchase):

- (IBAction)toMainMenu:(id)sender { 
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
                  bundle:nil]; 
    MainMenuViewController *mainMenu = (MainMenuViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"cover"]; 
    mainMenu.appPurchase = YES; 
    [self.navigationController pushViewController:mainMenu animated:YES]; 
} 

Вы также могли бы сохраняться информация о покупке где-то (NSUserDefaults может быть?) И сделать MainMenuViewController извлекает эту информацию самостоятельно (по методам init или даже viewDidLoad).

+0

спасибо. Я сделал это с чем-то, что я думаю, похоже на то, что вы сделали. Я объявил как свойство BOOL в MainMenuViewController вместо переменной экземпляра, тогда я мог бы получить доступ к нему из другого метода viewController в методе prepareForSegue с помощью Я предпочел бы сохранить данные, как вы предлагали. Я думаю, что это будет лучший, более профессиональный способ сделать это, но пока не знаю, как это сделать. Еще раз спасибо – RunnerGirl

+0

Bruno - я работал с вашим кодом в другом экземпляре, где у меня есть XIB-файл, который нужно синхронизировать с MainMenuVC и отправлять эту же информацию (appPurchased = YES;) Так как я не мог использовать ifIdentifierIsEqualTo для egue XIB, я пошел с вашей версией вместо моей. Он работал безупречно! Я вернусь и изменю свои другие ViewControllers на ваш код, поскольку он намного более краток и чище. Миллион спасибо за вашу помощь! – RunnerGirl

+0

@ RunnerGirl, добро пожаловать! :) –

Смежные вопросы