1

こんにちは、アプリケーションでアドレス帳を使用しています。シミュレーターで連絡先を取得します。しかし、iPhone 4S では、デバイスに連絡先が表示されません。iPhone 4 では、連絡先は 1 つしか取得できません。すべての連絡先が表示されない理由がわかりません。次のコードを使用しています。私を助けてください。

ABAddressBookRef ab=ABAddressBookCreate();
NSArray *arrTemp=(NSArray *)ABAddressBookCopyArrayOfAllPeople(ab); 
UIImage* image;
ContactArray=[[NSMutableArray alloc] init];
for (int i=0;i<[arrTemp count];i++) 
{
    NSMutableDictionary *dicContact=[[NSMutableDictionary alloc] init];
    NSString *str=(NSString *) ABRecordCopyValue([arrTemp objectAtIndex:i], kABPersonFirstNameProperty);
    UIImage *imgContactImage=(UIImage *)ABPersonCopyImageDataWithFormat([arrTemp objectAtIndex:i],kABPersonImageFormatOriginalSize);

    if(ABPersonHasImageData([arrTemp objectAtIndex:i])){
        image = [UIImage imageWithData:(NSData *)ABPersonCopyImageData([arrTemp objectAtIndex:i])]; 
    } else {
        image = [UIImage imageNamed:@""];  
    }
    NSString* phoneNumber=@"";

    NSString *mobileLabel=@"";

    //Get mobile phone number
    ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue([arrTemp objectAtIndex:i], kABPersonPhoneProperty);
    CFRelease(phoneNumbers);

    if(ABMultiValueGetCount(phoneNumbers)>0) {
        for(CFIndex j = 0; j < ABMultiValueGetCount(phoneNumbers); j++) {
           mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phoneNumbers, j);
            if([mobileLabel isEqualToString:@"_$!<Mobile>!$_"]) {

         phoneNumber = (NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, j);
            }
        }
    }
    else
    {
        phoneNumber=@"";
    }

    NSLog(@"%@",phoneNumber);
}
4

2 に答える 2

1

iPhone の連絡先へのアクセスを要求しましたか?

シミュレーターでは、それを要求する必要はありませんが (すべての連絡先が読み込まれます)、デバイスでは、これらの機能を機能させるには、ユーザーに連絡先へのアクセスを許可するように依頼する必要があります。

あなたが試すことができます :

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
        // First time access has been granted, do what you want
    });
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
    // The user has previously given access, do what you want
}
else {
    // The user denied access, ask him to reactive them on the settings
}

そして、コードが機能するはずです!

于 2013-01-15T11:41:03.270 に答える
0

これを試してください:

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

for (int i = 0; i < nPeople; i++) {
     // Get Contact info
     ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
     ABRecordID recordID = ABRecordGetRecordID(person);

    NSString *firstName = (NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
    NSString *lastName =  (NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty);
}

コピーしたオブジェクトを CFRelease することを忘れないでください。

于 2012-06-01T08:58:42.773 に答える