0

連絡先リストの名前と名前をiphonesdkから取得できますが、電話番号を取得できません。他の方法を試してみるとエラーが発生します。ここで電話番号を使用して他のものを取得する通常の方法は、コードの詳細です。

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

ただし、よく見ると、余分なものを追加することなく、名と名前を取得できます。しかし、私は同じ方法で電話番号を取得することはできません。

4

5 に答える 5

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

}
于 2012-05-07T12:10:09.277 に答える
2

これをチェックして:

あなたの問題は、この回答またはこれで解決する可能性があります。

私が理解しているようABRecordCopyValue(ref, kABPersonPhoneProperty)に、配列値が返されます。そして、文字列を取得しようとしているため、問題に直面する可能性があります。この解決策は試していませんが、うまくいくと思います。

お役に立てれば。

于 2012-05-07T12:00:30.233 に答える
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];

    }

それが動作します..

于 2012-05-07T12:09:08.567 に答える
1

次のことを試してください。

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

for (id number in phoneNumbers) {                    
    // do whatever you want
}
于 2012-05-07T12:05:04.050 に答える