Какой наиболее распространенный сценарий настройки приложения Какао при первом запуске? - PullRequest
2 голосов
/ 24 декабря 2010

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

1 Ответ

3 голосов
/ 25 декабря 2010

Стандартный способ сделать это - метод +(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.

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

alt text

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

...