私は非難されたアドレス帳フレームワークから新しい連絡先フレームワークにアプリケーションを移行しています。アプリケーションは、ABAddressBookRegisterExternalChangeCallback
を使用して、別のアプリケーションが連絡先を変更したときに通知を受け取ります。Contact Framework ABAddressBook.ABAddressBookRegisterExternalChangeCallbackに相当します。
連絡先フレームワークで同等の機能を見つけることができません。アップルのドキュメントではthe CNContactStoreDidChangeNotification
notificationで、デフォルトの通知センターを使用するように言う:
変更は別の
CNContactStore
に発生したときに通知を掲載します。 Appleのアドバイスを受け
、私のコードは次のようになります。
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "contactsChanged:",
name: CNContactStoreDidChangeNotification,
object: nil)
しかし、私はこのアプローチには二つの問題を発見した:
- を私は含めすべての変更、のために通知しています私自身のアプリケーションで作られたもの。
- 通知はスプリアスです - 1回の変更で多くの通知を受け取ります。
変更は私のアプリ内で行われたとき、私は、通知のデバッグの説明を記録した場合、私はこのような何かを得る:
NSConcreteNotification 0x7d3370e0 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
、変更が外部に行われた場合:
NSConcreteNotification 0x7bf7a690 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
を
ご覧のとおり、これらを区別することは何も明白ではありません。
ABAddressBookRegisterExternalChangeCallback
から取得できる連絡先フレームワークから同じ動作を取得する方法を教えてもらえますか?
自己は、このメソッドを呼び出すクラスインスタンスを参照しています。 – ogres
@ogres確かに、私の部分で言葉が貧弱です。基本的には、「自己」を渡すことは、私が何をしたのか(外部アプリからの変更だけを受け取る)を達成するのでしょうか?それがうまくいくためには、どのタイプの_type_が「自己」でしょうか? –
addressBookDidChange:メソッドが宣言されている限り、どのような型でも可能です。 – ogres