2013-05-23 3 views
4

ABAddressBook 라이브러리를 사용하여 iOS 앱에서 실제로 이상한 동작을보고 있습니다. 어떤 사람이 백그라운드에서 일어나는 일에 대해 어느 정도 통찰력을 줄 수 있는지 궁금하거나 논리 오류가 있으면 그냥 볼 수 없습니다.iOS kABPersonModificationDateProperty의 이상한 동작이 항상 업데이트되는 것으로 보입니다.

짧은 이야기 나는 사용자의 연락처 가져 오기에 크게 의존하는 VOIP 앱을 만들고 있습니다. 나는 푸시 알림과 함께 사용되는 이들의 온라인 백업을 유지합니다.

전화에서 수정되었으므로 정확하게 유지하려면 서버에 업데이트 요청을 보내야합니다. 문제는 많은 사용자 장치가 매우 큰 접촉 블록을 가진 서버를 자주 임의의 간격으로 스팸하는 것입니다. 언젠가 그것은 50+ 접촉 일 것입니다, 5 분 후에 또 다른 10, 그 때 단 하나가 새롭게하기 전에 달 일 것이다. 몇 명의 사용자에게 친구인지 묻고 야간에 주소록의 절반을 수정 한 것을 기억할 수 없습니다.

내 코드는 매우 간단하며 서버에 업데이트를 보내야 할 때마다 NSDate을 저장합니다. 추가, 수정 또는 삭제. 나는 주소록이 업데이트되었을 때 트리거하는 콜백을 알고 있지만 항상 메모리에있는 주소록에 대한 참조를 유지해야한다. 몇 가지 테스트를했는데 앱이 다운되거나 사용자가 앱을 죽이면 업데이트가 느슨합니다. VOIP 응용 프로그램을 실행하는 배경을 감안할 때 사람들이 배터리를 절약하기 위해 그것을 죽일 가능성이 있음을 느낍니다. 그런 이유로 모든 연락처를 통해 kABPersonModificationDateProperty 속성을 확인하여 루프합니다. 마지막으로 NSDate을 기록했습니다. 수정 된 내용이 더 새로운 경우 업데이트를 시작합니다.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 

NSDate *lastChecked = [dateFormatter dateFromString:[PListData readStringFromFile:@"lastContactsArchive"]]; 


CFDateRef modifyDate = ABRecordCopyValue(ref, kABPersonModificationDateProperty); 
... 
... 
else if ([(__bridge NSDate*)modifyDate compare:lastChecked]==NSOrderedDescending) // if modified after last check, create new contact and update 
{ 
    ... 
} 

누락 된 것이 있습니까? 이름/전화 번호/이메일 등을 변경했을 때만 수정 날짜가 업데이트 되었습니까? iCloud가 예를 들어 동기화 될 때 수정 되었습니까? 전화로 그 사람에게 전화하면 카운터가 업데이트됩니까?

3 대의 전화기에서 디버깅을 시도했는데 예상대로 동작합니다. 나는 여기에 공란을 그리는 중이며 서버가 만족스럽지 않으므로 도움을 얻을 수있을 것입니다.

+0

여전히 문제가 있습니까? – Omarj

+0

불행히도 제가 작업하고 있던 프로젝트가 잠시 연기되어서 더 이상이 문제를 조사하지 않았습니다. 하지만 예, 2 일 동안 검색을했는데 다른 정보를 얻을 수없는 것처럼 보였습니다. 코드가 다른 이유를 설명 할 수 없습니다. 말도 안되는 것처럼 들리겠다고 생각하면서 애를 썼다. –

+0

downvoters하려면, 왜 내 질문에 downvoting을 설명하십시오. 그것은 몇 번 upvoted 그래서 나는 당신이 이렇게 좋은 이유를 공유해야한다고 생각 했을까? –

답변

2

iphone이 iCloud/CardDav/Gmail/Exchange 계정과 연락처를 동기화 할 때 주소록이 백그라운드로 업데이트 될 수도 있습니다.

앱이 실행 중일 때도 발생할 수 있으므로 주소록 업데이트를 구독해야합니다.

+0

데이터가 변경되었습니다. 이것이 제가 묻고있는 것입니다. 자주 위의 확인을 실행하면 사용자가 계속해서 앱을 사용하는 한 업데이트 된 연락처를 계속 캐치합니다. 내가 묻는 것은 낮은 수준의 "수정 된"플래그가 설정되면 언제든지 이유없이 모든 시간을 설정하는 것입니다. –

+0

@SimonMcLoughlin 그것이 iCloud 계정이있는 경우 항상 설정되는 것입니다. 정의 된, 대부분의 경우입니다. iCloud는 몇 시간마다 연락처를 동기화하고 플래그를 재설정 할 수 있습니다.또한 Exchange/gmail 계정의 연락처를 사용하는 것도 마찬가지입니다. – avishic

+0

해결 방법은 무엇입니까? (iCloud를 비활성화하는 것 외에?) 연락처가 변경되면 그 속성을 계산할 것입니다. –