4

ABAddressBookRef 内のアドレスのプロパティにアクセスする方法がわかりません。電話番号で問題ありませんでした:

ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSArray* phoneNumbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);
CFRelease(phoneNumberProperty);

しかし、悲しいかな...アドレスに対してそれを行う方法がわかりません。私がこれを行う場合:

ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);
NSArray *address = (NSArray *)ABMultiValueCopyArrayOfAllValues(addressProperty);

Dictionary のように見えるものが返されますが、配列として型付けされています。その中のプロパティにアクセスするにはどうすればよいですか? ウェブ上でさまざまな提案を見てきましたが、それらはすべて、辞書から 1 行を引き出すだけで約 30 行のコードを必要とするようです!

誰でも助けてもらえますか?ありがとう!

4

1 に答える 1

11

アドレスについては、辞書の配列を取得するので、配列をループして、各辞書から必要なキー値を抽出します。

ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);
NSArray *address = (NSArray *)ABMultiValueCopyArrayOfAllValues(addressProperty);
for (NSDictionary *addressDict in address) 
{
    NSString *country = [addressDict objectForKey:@"Country"];
}
CFRelease(addressProperty);

ABMultiValueRef最初に NSArray に変換する代わりに、直接ループすることもできます。

ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);

for (CFIndex i = 0; i < ABMultiValueGetCount(addressProperty); i++) 
{
    CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(addressProperty, i);
    NSString *country = (NSString *)CFDictionaryGetValue(dict, kABPersonAddressCountryKey);
    CFRelease(dict);
}

CFRelease(addressProperty);
于 2011-06-27T13:35:20.640 に答える