2

我有一个大问题......我计划编写一个处理用户地址簿及其地址的应用程序。一切都很好 - 除了我无法确定 addesse 的类型是“工作”、“家庭”还是“其他”。

有人知道如何获得家庭、工作和其他的标签吗?

提前致谢

鲍里斯

这是我目前正在使用的功能:

    + (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");
}

这是日志输出:

ID:1 姓名:第一个用户 Firma:(null)地址:{ City = Reutlingen; 国家=德国;国家代码 = de; Street =“某条街道”;邮编 = 23456;}

地址:{ 城市 = 罗伊特林根;国家=德国;国家代码 = de; 状态 = BW;Street = "2 号街道"; 邮编 = 98765;}

ID:2姓名:第二联系人Firma:Firma Adresse:{ Country =“United States”;国家代码 = 我们;街道 = 测试;}

4

1 回答 1

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);

标签类型就是您要查找的内容。

祝你好运

于 2010-12-20T07:17:16.943 回答