联系电话iphone sdk

时间:2012-05-07 11:43:05

标签: ios cocoa-touch contacts abaddressbook

我可以从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)

但是,如果你仔细看看我能够得到名字和姓氏,没有任何额外的东西。但是我无法以同样的方式获得电话号码。

5 个答案:

答案 0 :(得分:2)

检查一下:

使用此answerthis可以解决您的问题。

据我所知,ABRecordCopyValue(ref, kABPersonPhoneProperty)会返回一些数组值。而你正试图获得一个字符串,这就是为什么你可能会遇到这个问题。我没有尝试过这个解决方案,但认为它会起作用。

希望这有帮助。

答案 1 :(得分: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 :(得分:1)

尝试以下方法:

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

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

答案 3 :(得分: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];

    }

它会起作用..

答案 4 :(得分: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);

    }
}