【问题标题】:Can I change 'main storyboard file base name' in app?我可以在应用程序中更改“主故事板文件基本名称”吗?
【发布时间】:2013-08-02 06:12:45
【问题描述】:

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

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

【问题讨论】:

  • 两个不同的目标和两个不同的Main.storyboard 文件是解决方案,我猜,下面的答案使问题过于复杂,并且没有给出所有其他问题的答案,例如为您的精简版或专业版处理不同的捆绑包 ID。

标签: ios xcode storyboard info.plist


【解决方案1】:

可以在启动时动态设置:

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

所以我想升级后重新启动应用是可以的。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2018-09-20
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2012-05-29
      • 2013-04-03
      相关资源
      最近更新 更多