0

ユーザーがアプリケーションを初めて実行するときに、ヘルプ オーバーレイを表示したいと考えています。

これを行うには、次のコードを使用していますdidFinishLaunching

if(![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"IPHONEFIRSTRUN"])
    [[NSUserDefaults standardUserDefaults]setBool:TRUE forKey:@"IPHONEFIRSTRUN"];

ビューコントローラーには、次のものがあります。

if ([[NSUserDefaults standardUserDefaults]boolForKey:@"IPHONEFIRSTRUN"]==TRUE) {
    [self HelpOverlayIphone];
    [[NSUserDefaults standardUserDefaults]setBool:FALSE forKey:@"IPHONEFIRSTRUN"];
}

ただし、2 回目の使用でもオーバーレイが表示されます。どうすればこれを修正できますか? どんな助けでも大歓迎です。

4

3 に答える 3

4

あなたのロジックは非常に複雑です。1 回発生したことを示すために、ユーザーの既定値を永続的に設定しています。代わりに、View Controller で値が設定されていないかどうかを確認し、設定されている場合はアクションを実行し、コードが再度実行されないように変数を設定します。

if ( ! [[NSUserDefaults standardUserDefaults]boolForKey:@"IPHONEFIRSTRUNCOMPLETE"] ) {
        [self HelpOverlayIphone];
        [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"IPHONEFIRSTRUNCOMPLETE"];
        [[NSUserDefaults standardUserDefaults] synchronize];
}

アプリ デリゲートのすべてのコードを取り出します。

また、XCode からアプリを停止しているため、元のコードが機能していない可能性が非常に高くなります。その場合、synchronizeユーザーのデフォルトの変更を使用しない場合、保存されません (通常のアプリの終了では、最終的に変更が永久に保存されます)。

于 2013-01-03T15:42:33.833 に答える
0

プログラムの開始時に使用しているデフォルトを登録しましたか? ここで NSUserDefaults のアップルのドキュメントを読み直すことをお勧めします

最初に電話をかける必要があります

- (void)registerDefaults:(NSDictionary *)dictionary

キーがまだ存在しない場合にのみキーを設定します。次に、最初の実行で偽のキーを確認し、この時点で設定します。

私の推測では、コードが機能しない理由は、ディクショナリが実際に永続的な方法で保存されていないためです。

于 2013-01-03T15:56:51.663 に答える
0

アプリが起動したときに起動するこの機能があります-常に信頼できます。他のアプリと衝突しないように、ランダムなハッシュである uniqueNameOfApp があります。

-(void)loadSettings {
NSMutableDictionary *sttngs = [[NSUserDefaults standardUserDefaults] 
objectForKey:uniqueNameOfApp];

    if(sttngs != nil) {
    [userSettings addEntriesFromDictionary:sttngs];
    } else {
    _appFiredForFirstTime = YES;
    }
}
于 2013-01-03T16:00:40.670 に答える