2013-11-25 1 views
2

설정 번들을 사용하여 앱을 구성하고 있습니다. 부작용으로 iOS 설정에서 앱 외부에서 동일한 설정을 사용할 수 있습니다. 이것은 위대합니다. 그러나 약간의 문제가 있습니다 - 나는 변화에 반응 할 필요가 있습니다. 예를 들어, 사용자가 다른 사람이 인식하는 데 사용하는 이름이 있으며 변경되면 서버 호출이 발생해야합니다. 어떻게 처리할까요?Settings.bundle : 앱이 앱 외부에서 값이 변경되었다는 사실을 앱에서 어떻게 인식해야합니까?

EDIT : 쉽게 받아주세요. 나는 전에 그것을 한 적이 없으며 모든 지침을 읽는 것이 어렵습니다. Settings.bundle은 명백한 문제가 아닙니다. 어쨌든, 자유롭게 질문을 투표하십시오. 그러나 적어도 그렇게하기 전에 모든 칭찬을 읽으십시오.

앱이 활성화 될 때 알림을 사용하고 기본값을보다 직접 조작하는 두 가지 방법을 시도했습니다. 두 번째 접근법은 앱에서 설정 변경/추가/삭제가 수행 될 때마다 실행되는 경우에만 실행되기 때문에 더 효과적입니다.

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    NSString *nameOld = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey]; 

    [[NSUserDefaults standardUserDefaults] synchronize]; 

    NSString *nameNew = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey]; 
+0

값을 확인하십시오. 기본값의 다른 곳에 저장된 버전과 비교하십시오. – Wain

+0

누가 하향 투표했는지 잘 모르겠다 ... 나는 관찰자를 추가하는 방법을 절대적으로 알고있다. 그것은 분명한 기술입니다. iOS 설정 화면에서 돌아 오는 것에 대해 궁금합니다. 나는 @Duncan Groenewald가 나에게 아이디어를 주었다. – Schultz9999

+0

@MartinR 왜 이것이 dup인지 잘 모르겠습니다. 그 질문에는 내 문제를 다루는 것이 없습니다. https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html에서 아무 것도 말하지 않습니다. 그래서 정교하게 말하십시오. – Schultz9999

답변

2

이 appDelegate 메소드의 설정 변경 사항을 확인해야합니다.

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    // Check for any changes to settings 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; 
    bool userICloudChoice = [userDefaults boolForKey:_cloudPreferenceKey]; 
} 
+0

아 .. 그럼 sychronizing하기 전에 오래된 값을 얻은 다음 동기화하고 새로운 것을 얻으시겠습니까? – Schultz9999

+0

@ 0x7fffffff 전체 NSUserDefaults 사본? 나는 그것을 사전으로 표현할 수있는 방법이 있다고 생각합니다. – Schultz9999

+0

사용자가 설정 번들 (iOS 설정 앱 사용)에서 앱 설정을 변경 한 경우 앱을 동기화하지 않으면 항상 이러한 변경 사항이 즉시 표시되는 것을 발견했기 때문에 동기화를 호출합니다. 그래서 사용자가 앱의 iOS 설정 앱을 사용하여 앱 설정을 변경 한 다음이를 감지하면이를 감지 할 수 있기를 바랐습니다. –