1

iOS 6で連絡先のアドレスを検索しようとすると、非常に奇妙な問題が発生します。連絡先に「アドレス」というラベルの付いたアドレスがない限り、検索できません。「職場」または「自宅」で入力した住所は表示されません。

この問題を理解するために、連絡先から個人の記録を取得し、保存されているすべての値をダンプすることは可能ですか?これが、これらの「自宅」と「職場」の住所がどこにあるかを見つけるのに役立つことを願っています。

これまでの私のコードは次のとおりです。

- (void)setAddressFromPerson:(ABRecordRef)person
{
    ABMultiValueRef addresses = ABRecordCopyValue(person, kABPersonAddressProperty);
    for (CFIndex j = 0; j<ABMultiValueGetCount(addresses);j++){
        CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(addresses, j);
        CFStringRef typeTmp = ABMultiValueCopyLabelAtIndex(addresses, j);
        CFStringRef labeltype = ABAddressBookCopyLocalizedLabel(typeTmp);
        NSString *street = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressStreetKey) copy];
        NSString *city = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressCityKey) copy];
        NSString *state = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressStateKey) copy];
        NSString *zip = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressZIPKey) copy];
        NSString *country = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressCountryKey) copy];

        NSLog(street);
    }
4

1 に答える 1

1

視覚的に解析するのは少し難しいですが、に関連するすべてをダンプする最も簡単な方法ABPersonRefは、vCard表現を取得することです。

ABPersonRef person = ...;
CFDataRef data = ABPersonCreateVCardRepresentationWithPeople(@[person]);
NSString *vcard = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSArray *( ⇒CFArrayRefなどから適切なキャストを想定)

于 2012-12-01T00:54:44.197 に答える