2

我使用项目中的不同目标制作了一个专业版和精简版应用程序。这两个应用程序使用不同的故事板和 info.plist 文件。
我想在精简版应用程序中制作应用程序购买按钮,以便像专业版应用程序一样操作。为此,当用户购买应用程序购买功能时,我需要将精简版使用的故事板文件更改为专业版的故事板文件。
使用的情节提要文件名存储在 xxx-info.plist 文件中的“主情节提要文件基本名称”中。那么,当用户做某事时,我可以更改情节提要文件的基本名称吗?我不知道这可能与否。

我怎样才能得到这个?谢谢你。

4

2 回答 2

5

您可以在启动时动态设置它:

// set storyBoardName according to upgrade status
UIStoryboard *storyBoard = 
   [UIStoryboard storyboardWithName:storyBoardName bundle:nil];
UIViewController *initViewController = 
   [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];

所以我想升级后再次启动应用程序是可以的。

于 2013-08-02T06:30:40.197 回答
3

是的,在您的 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];

}

如果您使用这种方法,您将不得不要求您的用户重新启动应用程序以加载另一个故事板。

于 2013-08-02T07:00:49.427 回答