2

プロジェクトとは異なるターゲットを使用して、プロ版とライト版のアプリを作成しました。これら 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];

というわけで、バージョンアップ後にアプリを再起動すればOKだと思います。

于 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 に答える