10

kABPersonFirstNameProperty、kABPersonLastNameProperty の iOS 定義済みキーを使用せずに、ABPersonRef および ABGroupRef のすべてのプロパティのリストを取得したいと考えています...アドレス帳で遊んでいて、特定の人。事前定義されたキーがあることは知っていますが、Apple は将来新しいキーを追加する可能性が非常に高いので、次のようなことをしたいと思います。

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *allPeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
for (int i = 0; i < [allPeople count]; ++i) {
    ABRecordRef person = [allPeople objectAtIndex:i];

    // This is the line that I can't figure out.
    NSArray *allProperties = (NSArray *)ABRecordCopyArrayOfAllProperties(person);
}

後でループする必要がある複数値の項目に遭遇することはわかっていますが、目標は、単一値のプロパティに対して反復できるキーのリストを取得することです。返されたクラスが何であるか、NSArray、NSDictionary などは気にしません。

アドバイスをいただければ幸いです。

4

2 に答える 2

8

次のことを試すことができます。

ARC の場合:

NSDictionary* dictionaryRepresentationForABPerson(ABRecordRef person)
{
    NSMutableDictionary* dictionary = [NSMutableDictionary dictionary];

    for ( int32_t propertyIndex = kABPersonFirstNameProperty; propertyIndex <= kABPersonSocialProfileProperty; propertyIndex ++ )
    {
        NSString* propertyName = CFBridgingRelease(ABPersonCopyLocalizedPropertyName(propertyIndex));
        id value = CFBridgingRelease(ABRecordCopyValue(person, propertyIndex));

        if ( value )
            [dictionary setObject:value forKey:propertyName];
    }

    return dictionary;
}
  • プロパティのローカライズされた名前を使用します - 異なるロケールでは異なるキーがあります。
  • プロパティの数は、iOS の次のバージョンで変更される可能性があります。

にならない限り、プロパティの数を調べることは理にかなっているかもしれpropertyNameませんUNKNOWN_PROPERTY

于 2012-06-28T09:53:44.613 に答える