2009-11-12 3 views
2

일부 값을 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]; 

답변

13

이 문제를 해결

open ~/Library/Preferences/org.your.app.plist 

또는 그냥 덤프 :

defaults read org.your.app 
+0

10.8 이상에서는 필요하지 않습니다. https://developer.apple.com/library/mac/releasenotes/CoreFoundation/CoreFoundation.html "[동기화]는 거의 모든 경우 자동입니다. 그것을 호출하는 유일한 이유는 방금 설정 한 값에 액세스 할 수있는 별도의 프로세스가 필요한 경우입니다. 예를 들어 환경 설정을 지정하면 다른 프로세스가 ... 동일한 기본 설정을 읽습니다. 대부분의 일반 앱은 절대로이 작업을 수행 할 필요가 없으며 IPC 용 환경 설정 시스템을 사용하는 대신 프로세스 간 통신 API (예 : XPC)를 사용하는 것이 좋습니다. " –

1

: 필요한 변경을 수행 한 후 다음 코드를 추가

1

NSuserDefualts는 구원이되지 않았다 게임 충돌에 대한 나의 가치. 을 사용하여
[ [NSUserDefaults standardUserDefaults] synchronize]; 값이 저장 중입니다.

관련 문제