2

startTimeNSUserDefaultsを使用しておよびendTimeNSDateを保存および取得しようとしています。それらを保存することは問題ではないようです:

self.convertedStringToDate = convertDate
NSLog(@"This should read 16:00: %@", self.convertedStringToDate);

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setObject:convertDate forKey:@"startDate"];
[userDefaults synchronize];

次に、正しく保存および取得していることを確認するために取得します。

NSDate* temporaryDate = (NSDate*)[userDefaults objectForKey:@"startDate"];
NSLog(@"Now User Defaults, should read 16:00: %@", temporaryDate);

私のNSLogを見ると、すべてが正常です。

2012-07-19 14:38:26.002 app[1973:707] This should read 16:00: 2012-07-19 16:00:00 +0000
2012-07-19 14:38:26.022 app[1973:707] Now User Defaults, should read 16:00: 2012-07-19 16:00:00 +0000

問題は、別の方法で日付を再度取得すると、日付がnullになることです。

 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 NSDate *tmpDate = (NSDate*)[userDefaults objectForKey:@"startTime"];
 NSLog(@"Retreiving date, should be 16:00: %@",tmpDate);

このログに示されているように:

2012-07-19 14:38:26.107 app[1973:707] Retreiving date, should be 16:00: (null)

誰かアイデアはありますか?また、チェックで日付を取得しないようにしましたが、日付は引き続きnullを返します(これも意味がありません。NSUSerDefaultsはこれらのキーとオブジェクトが格納されているデータベースです)。retainedまた、オブジェクトのプロパティを保存しようとしましたが、それでも役に立ちませんでした。私は何が欠けていますか?

編集:愚かなエラーについては、独自のコードを読むことが重要です。

4

3 に答える 3

5

コードは正しいですが...

tmpDate = [userDefaults objectForKey:@ " startTime "];

する必要があります

tmpDate = [userDefaults objectForKey:@ " startDate "];

于 2012-07-19T21:49:06.860 に答える
0

NSString でカテゴリを作成すると、コードは次のようになります。 NSString+date.h @interface (NSString) make class methods +(NSString)today; @end NSString+date.m @implimentation (NSString) +(NSString)today { NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [フォーマッタ setTimeStyle:NSDateFormatShortStyle]; [フォーマッタ setDateStyle:NSDateFormatShortStyle]; NSDate *today = [NSDate Date]; NSString *theDate = [フォーマッタ文字列FromDate:今日]; 日付を返します。}

使用するには、他のクラス NSString *theDate =[NSString today]; の他の場所で呼び出すだけです。デフォルトなどをいじらないのは簡単です。日付を取得して設定するよりも、より重要なことを心配する時間がはるかに長くなります。

于 2012-07-23T00:15:00.973 に答える