0

我已经构建了一个包含IAP( In App Purchase) 的应用程序。该应用程序是使用UINavigationController. 当用户决定购买内容时,解锁功能解锁内容。然后用户点击后退按钮,他们将返回主菜单,然后他们可以访问应用程序的其余部分。所有这一切都很好。

我的问题是,当用户转到属于 的解锁viewController内容UINavigationController,然后返回到主菜单页面时,应用程序已经清除了用户购买解锁内容并且(我假设)使用在此初始主菜单property.enabled = no;的方法中设置的属性,用于在重新加载主页面时重新锁定内容。viewDidLoadviewController

所以,我的问题是如何让应用知道用户已经购买了应用内内容,并在用户偏离主菜单页面后保持内容解锁?

我在想也许我可以BOOL appPurchased;mainMenuViewController. 然后从新解锁viewControllers的 中,包含一个prepareForSegueMethod将 设置为 的BOOLYES然后在声明中启用购买的内容if

像这样的东西:

  1. 之后声明BOOL appPurchased;_mainMenuViewController.m@implementation

  2. 在中实现以下方法mainMenuViewController.m

(void) viewWillAppear:(BOOL)animated {
    if (appPurchased) {
        [self enableLockedContent];
    } else if (!appPurchased){
        nil;
    }    
}
  1. UnlockedContentViewController中,实现以下连接到 a 的方法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接近工作的任何地方?有没有更好的办法?

4

1 回答 1

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 方法上)。

于 2013-05-27T06:01:07.517 回答