この小さな宝石のデバッグに数時間かかったので、ここに問題 (および解決策) を投稿しようと思いました。kABPerson*Property
後で連絡先データを抽出するために使用するアドレス帳定数の配列 ( ) を作成しています。驚くべきことに、値はすべてゼロのように見えます。これらは定数のように見えますが (とにかく iOS 7 では)、実際にはグローバル変数であるように見えますが、メモリの上書きの問題を突き止めることはできませんでした。いったい何が起こっているのでしょうか?
1 に答える
0
kABPerson*Property
への最初の呼び出しで「定数」が実際に初期化されることがわかりますABAddressBookCreate
。それ以前は、値はすべてゼロです。サンプルコードは次のとおりです。
NSLog(@"Before AddressBook Create, kABPersonLastNameProperty = %d", kABPersonLastNameProperty);
ABAddressBookRef store = ABAddressBookCreateWithOptions(NULL, NULL);
NSLog(@"After AddressBook Create, kABPersonLastNameProperty = %d", kABPersonLastNameProperty);
以前にアドレス帳にアクセスしたことがない場合は、次のような出力が表示されます。
Before AddressBook Create, kABPersonLastNameProperty = 0
After AddressBook Create, kABPersonLastNameProperty = 1
I 他の呼び出しも定数を初期化する可能性がありますが、私の調査では、への呼び出しでABAddressBookGetAuthorizationStatus
は十分ではありません。
于 2013-10-22T16:42:35.653 に答える