2010-12-14 13 views
2

私は大きな問題です...私はユーザーのアドレス帳とそのアドレスを扱うアプリケーションを書くつもりです。すべてがうまくいきます - 私は、タイプのタイプが "仕事"、 "家"か "その他"かどうかを判断することができないという事実を除いてすべてです。AddressBook FrameWork(iOS 4.2)で住所の種類を調べる方法

家庭、仕事などのラベルを取得する方法を知っている人はいますか?事前に

おかげ

ボリス

これは、現時点で使用した機能 - 私:

+ (void)testing { 
//Get the addressbook 
ABAddressBookRef _addressBookRef = ABAddressBookCreate(); 

//Fetch all contacts 
NSArray* allPeople  = (NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBookRef); 

//Walk the contacts 
for (id record in allPeople) { 
    //Get the contact´s id 
    NSInteger recordId = ABRecordGetRecordID((ABRecordRef)record); 

    //Get the contact´s name and company 
    NSString* recordName = (NSString *)ABRecordCopyCompositeName((ABRecordRef)record); 
    NSString* recordCompany = (NSString *)ABRecordCopyValue((ABRecordRef)record, kABPersonOrganizationProperty); 

    //Get the contact´s addresses 
    CFTypeRef adressesReference = ABRecordCopyValue((ABRecordRef)record, kABPersonAddressProperty); 
    NSArray *adressesArray = (NSArray *)ABMultiValueCopyArrayOfAllValues(adressesReference); 
    CFRelease(adressesReference); 

    NSLog(@"ID: %d", recordId); 
    NSLog(@"Name: %@", recordName); 
    NSLog(@"Firma: %@", recordCompany); 

    for (NSString *adress in adressesArray) { 
    NSLog(@"Adresse: %@", adress); 
    } 

    [adressesArray release]; 
} 

CFRelease(_addressBookRef); 
[allPeople release]; 
NSLog(@"\n"); 
} 

、ログ出力here's:

ID:1 名前:最初のユーザー ファーム:(null) アドレス:{ 市=ロイターリンゲン; 国=ドイツ; CountryCode = de; Street = "some street"; ZIP = 23456; }

住所:{ City = Reutlingen; 国=ドイツ; CountryCode = de; 状態= BW; Street = "Street number 2"; ZIP = 98765; }

ID:2 名:第二接触 ファーマ:ファーマ アドレス:{ 国= "アメリカ"; CountryCode = us; Street = Test;ここ }

答えて

10

を使用すると、抽出されたアドレス帳の値を取得する方法である:

ABMultiValueRef addresses = ABRecordCopyValue(ref, kABPersonAddressProperty); 
    for (CFIndex j = 0; j<ABMultiValueGetCount(addresses);j++){ 
     CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(addresses, j); 
     CFStringRef typeTmp = ABMultiValueCopyLabelAtIndex(addreses, 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]; 


     [street release]; 
     [city release]; 
     [state release]; 
     [zip release]; 
     [country release]; 
     CFRelease(dict); 
     CFRelease(type); 
     CFRelease(typeTmp); 
    } 
     CFRelease(addresses); 

ラベルタイプは、あなたが探しているものです。

幸運 シャニー

+0

こんにちは、それは迅速なバージョンに変換することは可能でしょうか? – user998405

+0

私はこれをすぐにやろうとします。ありがとう – shannoga

関連する問題