2011-11-10 10 views
-1

NSUserDefaultsに保存しているNSDateがあります。NSUserDefaultsからNSDateを取得すると常にnilが返されます

私のアプリケーションが2回目のパスでこのコードを実行すると、NSDateがNSUserDefaultsから取得されることを期待していますが、常にnilです。理由は分かりません。

NSDate *mostRecentMentionDate = [dateFormatter dateFromString:mostRecentMentionMessageTimestamp]; 
NSDate *savedMentionDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"mostRecentMentionDate"]; 

if (savedMentionDate == nil || [savedMentionDate isEqual:[NSNull null]]) { 
    //There is no existing mention, so save the most recent one 
    [[NSUserDefaults standardUserDefaults]setObject:mostRecentMentionDate forKey:@"mostRecentMentionDate"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+2

インデントを修正してください。 –

+1

NSDateを文字列に変換する必要はありません。NSUserDefaultsはNSDateオブジェクトを完全に格納できます。 http://stackoverflow.com/questions/2013850/whats-the-optimum-way-of-storing-an-nsdate-in-nsuserdefaults –

+0

私の日付は元々StringになっているのでdateFromStringを使用したNSDate: –

答えて

1

に問題があることを考えるには、あなたがmostRecentMentionDateのための有効なオブジェクトを取得していますか? NSUserDefaultsから​​を取得する前にNSLogに入れてください。日付形式に問題があるかもしれません。

1

私はそれが正常に動作し、このコードを使用する場合、私はあなたのdateformater

NSDate *mostRecentMentionDate = [NSDate date]; 
NSDate *savedMentionDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"mostRecentMentionDate"]; 

if (savedMentionDate == nil || [savedMentionDate isEqual:[NSNull null]]) { 
    //There is no existing mention, so save the most recent one 
    [[NSUserDefaults standardUserDefaults]setObject:mostRecentMentionDate forKey:@"mostRecentMentionDate"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
0

NSDateはNSCodingプロトコルに確認します。上記のコードはうまくいくはずです。

/

/ Create and store it 
NSDate * date = [NSDate date]; 
NSData * dateData = [NSKeyedArchiver archivedDataWithRootObject:date]; 
[dateData writeToFile:@"/Some/path/to/file.dat" atomically:NO]; 

// Now bring it back 
NSData * restoredDateData = [NSData dataWithContentsOfFile:@"/Some/path/to/file.dat"]; 
NSDate * restoredDate = [NSKeyedUnarchiver unarchiveObjectWithData:restoredDateData]; 

をそれとも、(ダブル)のNSNumberとしてtimeIntervalSinceReferenceDate値を取得し、前の日付を追跡するためにNSUserDefaultに保存することができます -

これを試してみてください。

関連する問題