2011-03-30 2 views
9

사용자가 iPhone의 설정 영역에서 설정을 변경하도록했습니다. 다음 네트워크 동기화 중에 사용자 변경 사항을 서버에 보내고 싶습니다. 그러나 변경이 이루어진 경우에만.사용자가 설정 번들을 변경 한시기를 알아 보는 방법

하지만 사용자가 설정 영역에서 변경 한 경우 어떻게 알 수 있습니까?

내가 할 수있는 경우, 변경 여부와 관계없이 항상 정보를 전송하거나 서버에서 정보를 먼저 얻고 사용자 기본값과 다른 경우 업데이트하는 옵션을 피하고 싶습니다.

이 문제를 해결하는 멋지고 우아한 방법이 있습니까? 도움을 주셔서 감사합니다.

주일 후 답변 없음 ... 이 질문이 너무 어렵습니까? 아니면 전혀 이해가되지 않습니까?

답변

16

아, 어리석은! 여기에 우리는 우아한 방식으로 간다. Xcode의 Apple 문서에서 AppPrefs를 검색하면 원하는 작업을 정확하게 수행 할 수있는 예제 응용 프로그램이 표시됩니다. 그냥 컴파일하고 실행하십시오! 그것은 NSUserDefaultsDidChangeNotification을 사용합니다.

코드는 관찰자를 등록하는 데 사용되는 :

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(defaultsChanged:) 
              name:NSUserDefaultsDidChangeNotification 
              object:nil]; 

올드 답 :

그것은 당신이 밖으로 수정 날짜를 얻을 수있는 것처럼처럼 보이지 않는 NSUserDefaults. 지금까지 나는 단지이 방법을 생각할 수 있습니다 : 기본 값 :

NSUserDefaults *previousDefaults = [someInstance previousUserDefaults]; 
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 

if([previousDefaults isEqualToDictionary:currentDefaults]) 
{ 
    [someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults]; 
    [yetAnotherInstance saveModified] 
} 

당신은 응용 프로그램이 처음 시작할 때 디스크에 사전으로 사용자의 기본 설정을 직접 저장할 수 있습니다. 그런 다음 앱이 열릴 때마다 그 두 사전을 비교합니다. 그럴 경우

+0

흠.아이폰에서 네트워크 설정을 변경하면 자동으로 아이폰을 찾아서 연결하려고하는 것이 더 좋은 방법이라고 생각합니다. 이는 사용자 설정 변경으로 인해 조치가 실행되었음을 의미합니다. 이것은 나에게도 좋은 해결책이 될 것이다. 그들이 어떻게 하는가? – san

+0

다음은 문제에 대한 우아하고 간단한 해결책입니다. –

+0

오, 그래! 이것은 위대합니다. 그러나 이것은 설정에 대한 변경을 촉발시킵니다. 특정 속성 변경에만 작용할 수있는 방법이 있습니까? – san

2

질문이 너무 힘들지는 않습니다. 단지 당신이 원하는 것을 할 수있는 간단한 방법이 없다는 것입니다. NSUserDefaults는 적어도 내가 알 수있는 한 각 앱의 설정에 대해 "마지막으로 수정 한"날짜를 기록하지 않으므로 사용자가 설정 앱을 사용하여 일부 설정을 변경하면보기 이외의 다른 방법을 감지 할 수있는 좋은 방법이 아닙니다. 모든 설정.

이 작업을 정말로 수행해야하는 경우 데이터 구조에 동기화하고 해당 구조를 기반으로하는 일종의 해시 또는 체크섬 계산에 관심이있는 설정을 읽는 것이 가장 좋습니다. 이 값을 앱이 마지막으로 실행 한 시간에 계산 한 값과 비교하고 서버가 다른 경우 서버와 동기화합니다. 원하는 경우 NSUserDefaults에 해당 값을 저장할 수 있지만 계산에 포함시키지 마십시오.

+0

감사합니다. Caleb. 내 솔루션이 너무 복잡해지기를 원하지 않습니다. 이런 식의 필요성이 없으며 아이디어를 지원할 라이브러리가 없다는 점에 놀랐습니다. 예를 들어, 변경 사항에 반응하십시오. 사용자 설정에서. – san

+0

일반적으로 응용 프로그램은 환경 설정이 최근에 변경되었는지 여부에 상관하지 않습니다. 어쨌든 필요할 때마다 기본값 시스템에서 값을 읽습니다. 따라서 무언가가 변경되면 응용 프로그램은 자동으로 새 값을 가져옵니다. 또한, NSUserDefaults는 MacOS X에서 제공되며, 그 맥락에서 사용자는 부작용없이 앱의 환경 설정 파일을 삭제할 수 있어야합니다. 앱은 기본 제공 기본값으로 돌아 가야합니다. iOS에서도 기본 시스템에 중요한 정보는 저장하지 않습니다. – Caleb

관련 문제