Извлечение NSDate из NSUserDefaults всегда возвращает ноль - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть NSDate, который я сохраняю в NSUserDefaults.

Когда мое приложение запускает этот код для 2-го прохода, я ожидаю, что NSDate будет получен из NSUserDefaults, но оно всегда равно нулю.Не уверен почему.

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];
}

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Вы уверены, что получаете действительный объект для mostRecentMentionDate? Поместите его в NSLog прямо перед извлечением savedMentionDate из NSUserDefaults, у вас могут быть проблемы с форматом даты.

1 голос
/ 10 ноября 2011

если я использую этот код, он работает нормально, я думаю, что проблема с вашим 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 голосов
/ 10 ноября 2011

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];

Или вы можете получить значение timeIntervalSinceReferenceDate в качестве NSNumber (double) и сохранить его в NSUserDefault, чтобы отслеживать предыдущую дату.

...