我构建了一个包含 IAP
(应用内购买
)的应用。该应用程序是使用 UINavigationController
构建的。当用户决定购买内容时,解锁功能会解锁该内容。然后,用户点击后退按钮,他们将返回主菜单,然后可以访问应用程序的其余部分。所有这些都运行良好。
我的问题是,当用户转到属于 UINavigationController
一部分的未锁定的 viewController
,然后返回主菜单页面时,应用程序已清除其内存用户已购买解锁内容并且(我假设)使用在此初始的 viewDidLoad
方法中设置的 property.enabled = no;
属性主菜单viewController
用于在重新加载主页时重新锁定内容。
所以,我的问题是如何让应用知道用户已经购买了应用内内容,并在用户偏离主菜单页面后保持内容解锁?
我想也许我可以在 mainMenuViewController
中声明 BOOL appPurchased;
。然后,从新解锁的 viewControllers 中,包含一个将 BOOL
设置为 YES
的 prepareForSegueMethod
,这将依次启用if
语句中购买的内容。
像这样:
在
@implementation
之后的mainMenuViewController.m
中声明BOOL appPurchased;
在
mainMenuViewController.m
中实现以下方法:
(void) viewWillAppear:(BOOL)animated { if (appPurchased) { [self enableLockedContent]; } else if (!appPurchased){ nil; } }
- 在
UnlockedContentViewController
中,实现以下连接到UIButton
的方法:
(IBAction)toMainMenu:(id)sender { UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *mainMenu = [mainStoryboard instantiateViewControllerWithIdentifier:@"cover"]; [self.navigationController pushViewController:mainMenu animated:YES]; }
我不知道如何在上面的 (IBAction)toMainMenu:(id)sender
方法中编写 MainMenuViewController.appPurchase =YES;
。
这种将 BOOL
值发送回 mainViewController
的配置是否接近工作?有没有更好的办法?
最佳答案
您可以将 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 方法上)。
关于ios - 解锁 UINavigationController 中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16765771/