Каков наиболее распространенный сценарий настройки приложения Какао при первом запуске?

Я создаю приложение и хотел бы, чтобы пользователь устанавливал некоторые обязательные настройки при первом запуске приложения. Какой наиболее распространенный сценарий для достижения этой цели? Должен ли я установить некоторые пользовательские настройки по умолчанию, чтобы увидеть, было ли настроено приложение? Также - если я определю, что приложение запускается впервые - как мне отобразить окно "Настройка"? Если я загружу его из отдельного xib-файла - как я могу отключить отображение главного окна приложения?

1 ответ

Решение

Стандартный способ сделать это в +(void)initialize метод вашего основного класса контроллера.

Например, в вашем интерфейсе (.h):

@interface MDAppController : NSObject {
    BOOL MDFirstRun;
    BOOL showInspector;
    BOOL showIcons;
}
@end

Тогда в вашем.m файле:

NSString * const MDFirstRunKey            = @"MDFirstRun";
NSString * const MDShouldShowInspectorKey  = @"MDShouldShowInspector";
NSString * const MDBrowserShouldShowIconsKey  = @"MDBrowserShouldShowIcons";

@implementation 

+ (void)initialize {
    NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];

    [defaultValues setObject:[NSNumber numberWithBool:YES]
                      forKey:MDFirstRunKey];

    [defaultValues setObject:[NSNumber numberWithBool:NO]
                      forKey:MDShouldShowInspectorKey];

    [defaultValues setObject:[NSNumber numberWithBool:YES]
                      forKey:MDBrowserShouldShowIconsKey];

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
    [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaultValues];
}

Разрыв строки

- (id)init {
   if (self = [super init]) {
       NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

       MDFirstRun = [[userDefaults objectForKey:MDFirstRunKey] boolValue];
       showInspector = [[userDefaults objectForKey:MDShouldShowInspectorKey] boolValue];
       showIcons = [[userDefaults objectForKey:MDBrowserShouldShowIconsKey] boolValue];
   }
   return self;
}



- (void)applicationDidFinishLaunching:(NSNotification *)notification {
   if (MDFirstRun) {
     [[NSUserDefaults standardUserDefaults]
         setObject:[NSNumber numberWithBool:NO]
         forKey:MDFirstRunKey];

     // show first use panel

   } else {
     // do normal launch
   }
}

 /// other methods
@end

По сути, вы устанавливаете все значения по умолчанию в вашем методе инициализации. (Метод инициализации вызывается очень рано, прежде чем init называется, так что это обеспечивает удобное место, чтобы убедиться, что все значения по умолчанию пользователя имеют значения по умолчанию). registerDefaults: метод NSUserDefaults отличается тем, что передаваемые вами значения используются только в том случае, если конкретное значение еще не установлено. Другими словами, когда в приведенном выше коде я установил первый ключ запуска на NO в applicationDidFinishLaunching: метод, который переопределяет значение по умолчанию и будет сохранен в файле настроек вашего приложения. Значения, сохраненные в файле настроек, имеют приоритет над значениями, которые вы зарегистрировали по умолчанию в initialize метод.

Чтобы отложить открытие главного окна, вы в основном хотите убедиться, что флаг "Видимый при запуске" отключен для рассматриваемого окна в инспекторе Атрибутов в Интерфейсном Разработчике:

альтернативный текст

Это тот флаг, который определяет, будет ли окно отображаться, как только загружается перо, или вам нужно будет делать это программно, используя что-то вроде makeKeyAndOrderFront:,

Другие вопросы по тегам