일부 값을 NSUserDefaults로 설정하고 앱을 종료하지 않고 검색하면 모든 것이 정상적으로 작동합니다. 앱을 다시 시작하면 변경 사항이 95 % 사라집니다. 시간의 5 %에 모든 것이 저장됩니다.NSUserDefaults가 디스크에 기록되지 않습니다.
나는이 문제에 처음으로 직면 해있다. 내 다른 애플 리케이션에서는 일반적으로 NSString을 NSUserDefaults에 저장하지 않습니다. NSString을 저장하면 문제가 발생할 수 있습니까?
-(void) mayShowFeedbackMessage
{
NSDateFormatter *dateFormatter = [ [NSDateFormatter alloc] init];
[dateFormatter setTimeStyle: NSDateFormatterLongStyle];
[dateFormatter setDateStyle: NSDateFormatterMediumStyle];
if ([ [NSUserDefaults standardUserDefaults] objectForKey: @"ratingsMessage_shown_on_date"])
{
NSString *lastRatingDateString = [ [NSUserDefaults standardUserDefaults]
objectForKey: @"ratingsMessage_shown_on_date"];
NSDate *lastRatingDate = [dateFormatter dateFromString: lastRatingDateString];
DebugLog(@"lastRatingDateString: %@", lastRatingDateString);
DebugLog(@"time since last message: %.0f", [ [NSDate date] timeIntervalSinceDate: lastRatingDate]);
if ([ [NSDate date] timeIntervalSinceDate: lastRatingDate] >= 120.0f)
{
[self showFeedbackMessage];
NSDateFormatter *dateFormatter = [ [NSDateFormatter alloc] init];
[dateFormatter setTimeStyle: NSDateFormatterLongStyle];
[dateFormatter setDateStyle: NSDateFormatterMediumStyle];
NSString *dateString = [dateFormatter stringFromDate: [NSDate date] ];
[dateFormatter release];
[ [NSUserDefaults standardUserDefaults] setObject: dateString
forKey: @"ratingsMessage_shown_on_date" ];
lastRatingDateString = [ [NSUserDefaults standardUserDefaults]
objectForKey: @"ratingsMessage_shown_on_date"];
DebugLog(@"new date: %@", lastRatingDateString);
}
}
else
{
NSDateFormatter *dateFormatter = [ [NSDateFormatter alloc] init];
[dateFormatter setTimeStyle: NSDateFormatterLongStyle];
[dateFormatter setDateStyle: NSDateFormatterMediumStyle];
NSString *dateString = [dateFormatter stringFromDate: [NSDate date] ];
[dateFormatter release];
[ [NSUserDefaults standardUserDefaults] setObject: dateString
forKey: @"ratingsMessage_shown_on_date" ];
NSString *lastRatingDateString = [ [NSUserDefaults standardUserDefaults]
objectForKey: @"ratingsMessage_shown_on_date"];
DebugLog(@"new date: %@", lastRatingDateString);
}
[dateFormatter release];
}
감사 :
여기 내 코드입니다. 올바르게 기록되고 않다면 그것은 당신이 볼 수있는 속성 편집기를 사용하여 기본 설정을 볼 수 있습니다 가치가 무엇인지를 들어
[ [NSUserDefaults standardUserDefaults] synchronize];
10.8 이상에서는 필요하지 않습니다. https://developer.apple.com/library/mac/releasenotes/CoreFoundation/CoreFoundation.html "[동기화]는 거의 모든 경우 자동입니다. 그것을 호출하는 유일한 이유는 방금 설정 한 값에 액세스 할 수있는 별도의 프로세스가 필요한 경우입니다. 예를 들어 환경 설정을 지정하면 다른 프로세스가 ... 동일한 기본 설정을 읽습니다. 대부분의 일반 앱은 절대로이 작업을 수행 할 필요가 없으며 IPC 용 환경 설정 시스템을 사용하는 대신 프로세스 간 통신 API (예 : XPC)를 사용하는 것이 좋습니다. " –