2011-08-03 16 views
10

kABPersonFirstNameProperty、kABPersonLastNamePropertyのiOS定義済みキーを使用せずにABPersonRefとABGroupRefのすべてのプロパティのリストを取得したいと思います...私はアドレス帳を再生していますが、すべてを繰り返していきたいです特定の人の値。私は事前に定義されたキーがあります知っているが、私のような何かをしたいと思いますので、Appleは非常によく、将来的に新しいものを追加することができます。ABRecordRefのすべてのプロパティのリストを取得するにはどうすればよいですか?

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 ...何でも。

アドバイスありがとうございます。

答えて

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の次のバージョンで変更される場合があります。

多分それは限りpropertyNameUNKNOWN_PROPERTY

+0

あなたのコードは、アナライザから文句を生成しますが、」潜在的なリークを'propertyName'に格納されたオブジェクトと 'valueに格納されたオブジェクトの潜在的なリーク' – MiQUEL

+0

ARCを使用していますか? –

+0

はい、すべてのプロジェクトをARCに移行しました。 – MiQUEL

2

Aliaksandrの解決策にはならないような特性の数に通過することは理にかなって安全ではありません。たとえば、あなたが特定のABSourceにABPersonレコードを作成しようとすると、この方法を使用すると、連絡先がそのソースに正しく同期しないことがあります。

私は単にABPersonから25 ABPropertyIDsのリストをコピーし、[]簡単なint型でそれらを立ち往生し、それらの上に反復...

 // Loop over all properties of this Person 

     // taken from Apple's ABPerson reference page on 9.12.13. 
     // URL: https://developer.apple.com/library/ios/documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/Reference/reference.html#//apple_ref/c/func/ABPersonGetTypeOfProperty 

     // count = 25. All are type ABPropertyID 

     int propertyArray[25] = { 
      kABPersonFirstNameProperty, 
      kABPersonLastNameProperty, 
      kABPersonMiddleNameProperty, 
      kABPersonPrefixProperty, 
      kABPersonSuffixProperty, 
      kABPersonNicknameProperty, 
      kABPersonFirstNamePhoneticProperty, 
      kABPersonLastNamePhoneticProperty, 
      kABPersonMiddleNamePhoneticProperty, 
      kABPersonOrganizationProperty, 
      kABPersonJobTitleProperty, 
      kABPersonDepartmentProperty, 
      kABPersonEmailProperty, 
      kABPersonBirthdayProperty, 
      kABPersonNoteProperty, 
      kABPersonCreationDateProperty, 
      kABPersonModificationDateProperty, 

      kABPersonAddressProperty, 
      kABPersonDateProperty, 
      kABPersonKindProperty, 
      kABPersonPhoneProperty, 
      kABPersonInstantMessageProperty, 
      kABPersonSocialProfileProperty, 
      kABPersonURLProperty, 
      kABPersonRelatedNamesProperty 
     }; 
     int propertyArraySize = 25; 



     for (int propertyIndex = 0; propertyIndex < propertyArraySize; propertyIndex++) { 
...code here 
}     
関連する問題