2012-11-24 3 views
1

앱 스토어에 이미 NSUserDefaults를 사용하는 앱이 있습니다. 기본값 중 일부는 기본 설정으로, 앱을 처음 시작할 때 설정되어 나중에 사용자가 원하는대로 변경할 수 있습니다.NSUserDefaults 첫 번째 실행 재설정

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if (! [defaults boolForKey:@"notFirstRun"]) { 

    [defaults setBool:YES forKey:@"notFirstRun"]; 

    [defaults setInteger:0 forKey:@"verseKey"]; 
    [defaults synchronize]; 
} 

내가 지금 가지고 내가 NSUserDefault 범주에서 좀 더 기본 설정을 추가 할 것입니다 오전 문제를, 그래서는이처럼 보이게하려면 : 그래서, 내 AppDelegate에의 appDidFinishLaunchingWithOptions에 내가 넣어

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if (! [defaults boolForKey:@"notFirstRun"]) { 

    [defaults setBool:YES forKey:@"notFirstRun"]; 
    NSString *smalltitle = @"4"; 
    NSString *smallarticle = @"3"; 
    [defaults setObject:smalltitle forKey:@"Title"]; 
    [defaults setObject:smallarticle forKey:@"Article"]; 
    [defaults setInteger:0 forKey:@"verseKey"]; 
    [defaults synchronize]; 
} 

이미 앱을 다운로드 한 사용자에게 문제가 발생하며이를 업데이트하는 것으로 알고 있습니다. notFirstRun Bool이 이미 YES로 설정되어 있기 때문에 코드를 실행하지 않습니다. 내가 여기서해야 할 일에 대한 어떤 생각?

+3

참조하시기 바랍니다 코드 http://stackoverflow.com/a/5397647/457406 그 "firstRun"물건은 완전히 불필요합니다. –

답변

0

notFirstRun 부울 값 (예 : notFirstRunTwo)으로 변경하십시오. 그것은 기존 사용자에게도 '아니오'입니다.

+1

누가이 답을 표시했는지 확실하지 않지만 내 문제점과 설명에 대해 가장 간단합니다. – user717452

+1

그리고 앱의 10 번째 버전에서는'notFirstRunTen'을 추가하기 만하면됩니다. 정확하게 그 문제 때문에 기본값을 등록하는 것이 더 낫습니다. 또 다른 한가지는 등록 할 때 기존 사용자의 기본값을 실제로 변경할 수 있다는 것입니다. 'firstRun' 메쏘드를 사용하면 사용자가 설정 한 값과 사용자가 건드리지 않은 값을 구분할 수 없습니다. Btw, 나는 downvote하지 않았다. –

+0

@MatthiasBauch 새 기본값을 설정해야하는 새로운 기능을 지속적으로 추가하는 경우에만 발생합니다. 그렇지 않으면 모든 새로운 업데이트가 그 두 개의 키로 작동합니다. – user717452

6

적절한 해결책은 실제로 NSUserDefaults에 기본값을 채우지 않는 것입니다. 대신 registerDefaults: 메서드를 사용하십시오. 응용 프로그램 시작시

은 당신이 할 : 그것 뿐이다

NSUserDefaults *default = [NSUserDefaults standardUserDefaults]; 
[defaults registerDefaults:@{ 
    @"Title" : @"4", 
    @"Article" : @"3", 
    @"verseKey" : @0 
}]; 

합니다. 앱이 실행될 때마다 이것을 호출하십시오. 이러한 기본값은 실제로 유지되지 않습니다. 키에 대한 명시 적 값이없는 경우에만 값이 리턴됩니다. 기존 값에 영향을주지 않고 원하는 기본값으로 업데이트 할 수 있습니다.

+0

정답 일 것입니다. 언급 해 주셔서 감사합니다. – Binarian

0

나는 다음을 수행하는 것이 좋습니다 : 저장된 응용 프로그램 버전에 대한

  • 체크 userdefaults를가 현재 또는하지, 그렇지 않은 경우와 동일합니다.
  • 저장 현재 응용 프로그램 버전과 할 첫 번째 발사 초기화

`

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *appVersion = [NSString stringWithFormat:@"%@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]]; 

if (! [defaults objectForKey:appVersion ]) 
{ 
    /// store the current version and then do your first run functions 
     [defaults setObject:[NSNumber numberWithInt:1] forKey:appVersion]; 
    /// here do your first run 
...... 
}` 
관련 문제