2

辞書を NSUserDefaults に追加して「同期」メソッドを呼び出しますが、アプリを閉じて再度開くと、NSUserDefault に保存されている値は nil です。

#define kStartTime @"startTime"
#define kEndTime @"endTime"
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
NSString *startTime=@"08:00";
NSString *endTime=@"18:00";
NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,kStartTime,
                           endTime,kEndTime,
                            nil];
[defaults registerDefaults:dict];
[defaults synchronize];

そして、viewDidLoad私はこれを呼び出すメソッドで:

NSString *startTimeValue=[defaults stringForKey:kStartTime];

シミュレーターでアプリを再度開くと、startTimeValue はまだ nil です。UserDefaults はシミュレーターに保存できませんか?

私のポイントは、アプリを閉じてシミュレーターで再度開くと、値がなくなっているということです。

アップルのドキュメントを検索した後、これを取得しました。

registerDefaults:.

Apple Document で述べられているように:指定された辞書の内容を登録ドメインに追加します。

*登録ドメインの内容はディスクに書き込まれません。*アプリケーションを起動するたびにこのメソッドを呼び出す必要があります。アプリケーションの Resources ディレクトリに plist ファイルを配置し、そのファイルから読み取った内容で registerDefaults: を呼び出すことができます。

したがって、の機能はregisterDefaults:アプリでデフォルト値を設定することであり、デフォルト値はディスクに保存されませんsynchronize

4

2 に答える 2

1

デフォルトを登録する前に、NSUserDefaults から値を読み取ろうとしていると思います。デフォルトを登録すると、これらの値はディスクに保存されず、次のアプリケーションの起動まで保持されません。アプリを起動するたびにデフォルト値を登録する必要があります。

NSUserDefaults からオブジェクトを読み取り、以前に値を保存していない場合は、登録されているデフォルト値が返されます。以前に値を保存したことがある場合は、この値が返されます。

投稿したコードでは、userDefaults に何も保存していません。したがって、デフォルトとして登録した値が返されます。値を登録していない場合、これは nil を返します。

デフォルトを登録するコードは、アプリケーション ライフ サイクルの非常に早い段階で実行されるメソッドに配置する必要があります。使用することをお勧めしますapplication:didFinishLaunchingWithOptions:

複数の値を NSUserDefaults に保存する場合は、複数のsetObject:forKey:呼び出しを使用する必要があります。
registerDefaults:複数のキーを同時に NSUserDefaults に保存するために使用することはできません!

于 2013-08-20T08:17:07.403 に答える
-1
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,@"kStartTime",
                        endTime,@"kEndTime",
                        nil];
    [defaults registerDefaults:dict];
    [defaults synchronize];


    NSString *startTimeValue=[defaults stringForKey:@"kStartTime"];

    NSLog(@"%@",startTimeValue);

このように @"value" のようなキーを追加する必要があります。

今、このコードを試してみてください....

于 2013-08-20T07:51:49.403 に答える