Могу ли я изменить «базовое имя основного файла раскадровки» в приложении?

Я сделал приложение для про и облегченной версии, используя другую цель из проекта. Эти два приложения используют разные раскадровки и файл info.plist.
Я хочу сделать кнопку покупки в приложении в облегченной версии, чтобы она работала как приложение в профессиональной версии. Для этого мне нужно изменить файл раскадровки, который использует облегченная версия, на файл раскадровки профессиональной версии, когда пользователи покупают функцию покупки приложения.
Используемое имя файла раскадровки хранится в «основном имени файла раскадровки» в xxx-info .plist-файл. Итак, могу ли я изменить базовое имя файла раскадровки, когда пользователи что-то делают. Я не знаю, возможно это или нет.

Как я могу получить это? Спасибо.


person bureaucoconut    schedule 02.08.2013    source источник
comment
две разные цели с двумя разными файлами Main.storyboard - это решение, я думаю, ответы ниже усложняют проблему и не дают ответа на все дополнительные вопросы, например, например. обработка различных идентификаторов пакетов для облегченной или профессиональной версии.   -  person holex    schedule 10.12.2015


Ответы (2)


Вы можете установить его динамически при запуске:

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

Поэтому я думаю, что можно снова запустить приложение после обновления.

person Mundi    schedule 02.08.2013

Да, в вашем методе 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];

}

Если вы используете этот подход, вам придется попросить пользователя перезапустить приложение, чтобы загрузить другую раскадровку.

person Marius Waldal    schedule 02.08.2013