我使用项目中的不同目标制作了一个专业版和精简版应用程序。这两个应用程序使用不同的故事板和 info.plist 文件。
我想在精简版应用程序中制作应用程序购买按钮,以便像专业版应用程序一样操作。为此,当用户购买应用程序购买功能时,我需要将精简版使用的故事板文件更改为专业版的故事板文件。
使用的情节提要文件名存储在 xxx-info.plist 文件中的“主情节提要文件基本名称”中。那么,当用户做某事时,我可以更改情节提要文件的基本名称吗?我不知道这可能与否。
我怎样才能得到这个?谢谢你。
我使用项目中的不同目标制作了一个专业版和精简版应用程序。这两个应用程序使用不同的故事板和 info.plist 文件。
我想在精简版应用程序中制作应用程序购买按钮,以便像专业版应用程序一样操作。为此,当用户购买应用程序购买功能时,我需要将精简版使用的故事板文件更改为专业版的故事板文件。
使用的情节提要文件名存储在 xxx-info.plist 文件中的“主情节提要文件基本名称”中。那么,当用户做某事时,我可以更改情节提要文件的基本名称吗?我不知道这可能与否。
我怎样才能得到这个?谢谢你。
您可以在启动时动态设置它:
// set storyBoardName according to upgrade status
UIStoryboard *storyBoard =
[UIStoryboard storyboardWithName:storyBoardName bundle:nil];
UIViewController *initViewController =
[storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];
所以我想升级后再次启动应用程序是可以的。
是的,在您的 AppDelegate application:didFinishLaunchingWithOptions:launchOptions 方法中,您可以从 plist 中获取情节提要名称,然后根据此设置加载情节提要。或者,您可以将情节提要名称存储在 UserDefaults 中,并在用户为专业版付费后更新该设置。
或者,您可以使用 UserDefaults 来存储用户是否已升级,并将情节提要名称作为常量保存在 appdelegate 中:
#define kStoryboardLite @"LiteStoryboard.storyboard"
#define kStoryboardPro @"ProStoryboard.storyboard"
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *storyboardName;
NSString *userType = [[NSUserDefaults standardUserDefaults] objectForKey:@"userType"];
if ([userType isEqualToString:@"pro"]) {
storyboardName = kStoryboardPro;
} else {
storyboardName = kStoryboardLite;
}
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
UIViewController *initialViewController = [storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewController;
[self.window makeKeyAndVisible];
}
如果您使用这种方法,您将不得不要求您的用户重新启动应用程序以加载另一个故事板。