2012-05-07 4 views
0

Я могу вытащить имя и фамилию из списка контактов из iphone sdk, однако я не могу извлечь из него номер телефона. Я получаю сообщение об ошибке при попытке другого пути, и обычный способом я получаю другие вещи с номером телефона здесь есть детали с кодом:Контактные номера iphone sdk

- (IBAction)buttonmessage { 
    ABAddressBookRef addressBook = ABAddressBookCreate(); // create address book reference object 
    NSArray *abContactArray = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); // get address book contact array 

    NSInteger totalContacts = [abContactArray count]; 

    for(NSUInteger loop= 0 ; loop < totalContacts; loop++) 
    { 
     ABRecordRef record = (__bridge ABRecordRef)[abContactArray objectAtIndex:loop]; // get address book record 

     if(ABRecordGetRecordType(record) == kABPersonType) // this check execute if it is person group 
     { 
      ABRecordID recordId = ABRecordGetRecordID(record); // get record id from address book record 

      recordIdString = [NSString stringWithFormat:@"%d",recordId]; // get record id string from record id 

      firstNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonFirstNameProperty); // fetch contact first name from address book 
      lastNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonLastNameProperty); // fetch contact last name from address book 

      NSString *phnumber = (__bridge NSString *)ABRecordCopyValue(record, kABPersonPhoneProperty); 

      myArray2 = [NSArray arrayWithObjects:firstNameString,lastNameString,phnumber,nil]; 

      NSString *m12=[NSString stringWithFormat:@"%@,%@,%@",[myArray2 objectAtIndex:0],[myArray2 objectAtIndex:1],[myArray2 objectAtIndex:2]]; 
     } 

Выход:

Abdullah,Rashed,ABMultiValueRef 0x80426a0 with 1 value(s) 
    0: _$!<Mobile>!$_ (0x8042da0) - 0550979691 (0x8042dc0) 
2012-05-07 14:43:06.670 Firstphase[2914:207] Hussain,Mahmood,ABMultiValueRef 0x80442d0 with 1 value(s) 
    0: _$!<Mobile>!$_ (0x8044290) - 055979896 (0x80442b0) 


2012-05-07 14:43:06.671 Firstphase[2914:207] Nasir,Jilaani,ABMultiValueRef 0x8046070 with 1 value(s) 
    0: _$!<Mobile>!$_ (0x8046000) - 055982391 (0x8046020) 


2012-05-07 14:43:06.673 Firstphase[2914:207] Ghulam,Basith,ABMultiValueRef 0x8046850 with 1 value(s) 
    0: _$!<Mobile>!$_ (0x8046810) - 055871943 (0x8046830) 

Однако если вы внимательно посмотрите, я могу получить имя и фамилию без лишних вещей. Но я не могу получить номера телефонов одинаково.

+0

Если один из нижеприведенных ответов решил вашу проблему, отметьте его s ответ, чтобы помочь будущим посетителям сайта найти ответы на подобные проблемы. – pasawaya

ответ

2
ABMutableMultiValueRef multi; 
int multiCount = 0; 
multi = ABRecordCopyValue(record, kABPersonPhoneProperty); 
multiCount = ABMultiValueGetCount(multi); 
for (int i = 0; i < multiCount; i++) { 

    phoneNumber = (NSString *) ABMultiValueCopyValueAtIndex(multi, i); 
    [someArray addObject: phoneNumber]; 

} 
2

проверить это:

Ваша проблема может решить эту answer или this.

Как я понимаю ABRecordCopyValue(ref, kABPersonPhoneProperty) возвращает некоторое значение массива. И вы пытаетесь получить строку, поэтому вы можете столкнуться с этой проблемой. Я не пробовал это решение, но думаю, что это сработает.

Надеюсь, это поможет.

1

Попробуйте следующее:

ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(record, kABPersonPhoneProperty); 
NSArray *phoneNumbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty); 

for (id number in phoneNumbers) {      
    // do whatever you want 
} 
1

Следующий код будет получать все телефонные номера из списка контактов: -

ABAddressBookRef addressBook = ABAddressBookCreate(); 
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); 
    for (int i = 0; i < nPeople; i++) 
    { 
     ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i); 

     ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(ref, kABPersonPhoneProperty); 
     NSArray* phoneNumbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty); 
     CFRelease(phoneNumberProperty); 
     [phoneNumbers release]; 

    } 

Он будет работать ..

1
-(void)displayPerson 
{ 



CFErrorRef error = NULL; 


    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); 

    if (addressBook != nil) 
    { 
     NSLog(@"Succesful."); 
     NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 

     NSUInteger i = 0; 
     for (i = 0; i < [allContacts count]; i++) 
     { 
      Person *person = [[Person alloc] init]; 
      ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i]; 
      NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty); 
      NSString *lastName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty); 
      NSString *fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 
      NSString *phone=nil; 
      ABMultiValueRef phoneNumbers = ABRecordCopyValue(contactPerson,                    kABPersonPhoneProperty); 
      if (ABMultiValueGetCount(phoneNumbers) > 0) { 
       phone = (__bridge_transfer NSString*) 
       ABMultiValueCopyValueAtIndex(phoneNumbers, 0); 
      } else { 
       phone = @"[None]"; 
      } 
      person.fullname = fullName; 
      person.phoneNum=phone; 
      [self.tableData addObject:person]; 
      person=nil; 
    } 
    CFRelease(addressBook); 

    } 
} 
+0

Благодарим вас за решение, но я поднялся с выбранным решением выше. В любом случае спасибо еще раз. – obaid

+0

Что такое тип данных человека – Vishnu

+0

человек является NSObject Class. – jbchitaliya

Смежные вопросы