2012-11-23 3 views
0

다른 서버의 데이터베이스와 동기화되는 xcode에 프로그램을 작성하고 있지만 업데이트 할 정보는 마지막으로 동기화 한 날짜에 따라 다릅니다. "dateLastSynced"타임 스탬프를 저장하는 가장 좋은 방법은 무엇입니까? 프로그램을 열면 자동으로 날짜 스탬프 이후에 발생한 변경 사항을 동기화 할 수 있습니까?Datestamp 저장 iOS

답변

1

은 분명히 [NSDate date] 당신에게 NSDate 형식으로 현재 날짜를 얻을 수 있지만, SQLite 데이터베이스에 로깅하는 경우, 당신은 또한 예를 SELECT datetime();에 해당하는 SQLite date and time function을 사용할 수 있습니다.

그러나이 타임 스탬프를 원격 웹 서비스 요청 (예 : 서버가 자체 내부 시계 및 타임 스탬프 기록과 비교하여 검사 할 타임 스탬프)에 사용하는 매개 변수로 사용하는 경우, 로컬 시계를 전혀 사용하지 마십시오. 해당 서버에서받은 타임 스탬프에서 dateLastSynced을 확인하고 로컬 시계를 전혀 사용하지 마십시오. 효과적으로 웹 서버의 타임 스탬프 메커니즘이 프로세스를 제어하게합니다. 따라서 원격 서버에서 적절한 타임 스탬프 필드를 가져 와서 데이터베이스의 dateLastSynced 타임 스탬프에 저장합니다. 열쇠는 동기화 로직에 부정적인 영향을 미칠 수있는 사소한 시간 조정 (또는 더 나쁨, 현혹되지 않는 시간대 관리)을 원하지 않는다는 것입니다.

개인적으로 원격 데이터베이스와 로컬 데이터베이스 간의 동기화를 조정할 때 일반적으로 로컬 데이터베이스에 구성 정보가 들어있는 한 행 테이블이 있으며이 서버 기반 타임 스탬프가 저장됩니다. NSUserDefaults (Preferences and Settings Programming Guide 참조)이나 plist 등을 사용할 수는 있지만 개인적으로이 동기화 타임 스탬프는 로컬 데이터베이스의 상태 속성으로 볼 수 있습니다. 그러므로 나는 거기에 보관하는 것이 더 편합니다. 다른 곳에 보관하는 경우 데이터베이스를 업데이트 할 수있는 다른 프로세스 (예 : 사용자가 새로운/수정 된 데이터 구조로 버전 2.0으로 응용 프로그램을 업데이트 할 때 마이그레이션 계획이 무엇인지)을 고려해야합니다.

그래서 가치있는 일이라면 개인적으로 데이터베이스 동기화 정보를 데이터베이스에 유지할 수 있습니다. 단 하나의 행 구성 테이블을 갖고 있다고해도 어리석은 느낌이 들더라도. (제쳐두고, 나는 또한 구성 테이블에 app/database 버전 번호와 같은 필드를 포함하는 경향이 있습니다.)

+0

정보를 서버에 저장하는 것에 대해 알지만, 저장하고 싶습니다. 장치는 데이터베이스를 사용하지 않고도 쉽게 수행 할 수 있습니까? 단일 행을 저장하기 위해 테이블을 만들어야하는 것은 비효율적이라고 생각합니다. iOS에는 키/값 쌍 또는 그와 같은 설정을 저장하는 방법이 있다고 생각했는데 사실이 아니 었나요? –

+0

'NSUserDefaults'를 사용할 수는 있지만, 실제로는 데이터베이스의 상태 (버전 번호, 동기화 정보 등)에 대한 주요 정보를 유지하는 한 행 구성 테이블을 설명하는 것을 선호합니다. 나는 이것이 개인적인 취향의 문제 일지 모르나 나는 데이터베이스가 자신의 상태에 관한 정보를 유지하는 것을 좋아한다. 어쨌든 내 업데이트 된 답변을 참조하십시오. – Rob

+0

고마워, 정확히 내가 필요로하는 thats! –