私はアプリを作成していますが、最初のアプリの起動時にユーザーにいくつかの必須の設定を設定してもらいたいです。これを達成するための最も一般的なシナリオは何ですか?アプリがセットアップされているかどうかを確認するために、いくつかのユーザーデフォルトを設定する必要がありますか?また、アプリが初めて起動されたと判断した場合、「セットアップ」ウィンドウをどのように表示すればよいですか?separte 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
基本的に、initializeメソッドですべてのデフォルト値を設定します。(initializeメソッドは、が呼び出される前に非常に早い段階でinit
呼び出されるため、ユーザーのデフォルトがすべてデフォルト値であることを確認するのに便利な場所を提供します)。のregisterDefaults:
メソッドはNSUserDefaults
、特定の値がまだ設定されていない場合にのみ渡す値が使用されるという点で特別です。つまり、上記のコードで、applicationDidFinishLaunching:
メソッドの最初の起動キーをNOに設定すると、デフォルト値が上書きされ、アプリケーションの設定plistファイルに保存されます。環境設定ファイルに保存されている値は、メソッドでユーザーのデフォルトに登録した値よりも優先されますinitialize
。
メインウィンドウのオープンを延期するには、基本的に、InterfaceBuilderの属性インスペクターで問題のウィンドウの「起動時に表示」フラグがオフになっていることを確認する必要があります。
ペン先がロードされるとすぐにウィンドウが表示されるかどうか、またはのようなものを使用してプログラムでウィンドウを表示する必要があるかどうかを決定するのは、そのフラグですmakeKeyAndOrderFront:
。