2013-09-27 2 views
2

AddressBook 데이터베이스에 변경 사항이있을 경우 ABAddressBookRegisterExternalChangeCallback을 사용하여 등록합니다. 나에게 잘 작동하고 알림을받을 수 있지만 앱이 실행 중일 때만 작동합니다.앱이 용어 완성 일 때도 ABAddressBookRegisterExternalChangeCallback이 작동합니까?

일단 앱이 종료 (종료) 된 다음 재시작되면 해당 시간 동안 변경된 사항을 종료 후 다시 시작할 때까지 인식하지 못합니다.

이러한 변경 사항을 감지하는 방법이 있습니까? 아니면이 방법으로 작동하도록 설계 되었습니까?

샘플 내가 사용하고 코드 -있는 viewDidLoad에서

- 앱이 활성화되면

CFErrorRef error = NULL; 

addressBook = ABAddressBookCreateWithOptions(NULL, &error); 

ABAddressBookRegisterExternalChangeCallback(addressBook,addressBookChanged,(__bridge void *)(self)); 

그리고 콜백

void addressBookChanged(ABAddressBookRef reference, CFDictionaryRef dictionary, void *context) { 
NSLog(@"There was a change in the addressbook"); 

답변

1

없음은, 이러한 경고 만받을 수 있습니다.

백그라운드 처리를위한 iOS7 지원은 일종의 모니터링을 허용하지만 아마이 콜백을 사용하지 않을 수 있습니다.

0

나는 지금이 문제에 대한 해결책을 모색하고 있으며이 콜백을 사용하고 다른 곳과 앱 실행시 주소록 크기를 저장하고 크기를 비교하여 변경이 발생했는지 판단하려고합니다. . 나는 대부분의 변화가 크기면에서 작은 차이를 일으킬 가능성이 있다고 가정하고 있습니다. 이 두 가지 사이에서 나는 불완전하지만 통행 가능한 해결책이 존재할 수 있다고 생각한다.

+0

나는 이것에 대해 강력한 브레인 스토밍을했다. 크기를 저장하면 작동하지 않습니다. +1과 -1이면 어떨까요? 크기 변경은 0이지만 연락처가 변경됩니다. 내가 처리하는 방식은 핵심 데이터를 사용하는 것이다. 동기화 된/사용 된 모든 연락처를 coredata 모델에 저장하고, 각 연락처에는 ID가 있으며, 그러면 ABAddressBook에있는 것과 비교할 수 있습니다. – VaibhavAggarwal

+0

그래, 그게 더 합리적이다 -하지만 주소록 파일의 실제 크기를 측정 할 수는 없지만 연락처의 수는 훨씬 적다. 비록 이론적으로 불완전 할지라도 생각할 수있는 모든 상황에 대해 정확한 변화 측정을 할 수 있습니다. – Karoh

+0

다시 근본적인 문제는 크기에 대해 확신 할 수 없다는 것입니다. 같은 수의 바이트를 제거하고 쓸 수 있습니다. 각 연락처를 엔티티라고 생각하면 모든 엔티티의 모든 필드에 차이를 찾을 수 있어야합니다. 이전 버전의 데이터를 비교할 어딘가에 저장했다면 그렇게 할 수 있습니다. – VaibhavAggarwal

관련 문제