4

選択した携帯電話番号を取得しようとしています

ABMultiValueRef phones = ABRecordCopyValue(person, property);
CFStringRef phoneNumber = ABMultiValueCopyValueAtIndex(phones, identifier);

私は複数の携帯電話と連絡を取り合っています (すべて「携帯」と表示されています)。最初の番号を選択すると、phoneNumber から最初の番号が返されますが、連続する番号を選択すると、phoneNumber から前の番号が返されます。

連絡先: Jay Jaymes モバイル +1111111111 モバイル +2222222222 モバイル +3333333333

最初のものをタップphoneNumber= +1111111111

2 つ目をタップphoneNumber= +1111111111

3 つ目をタップphoneNumber= +2222222222

4

4 に答える 4

4

これは私が使用するコードです。そして、正しい電話番号のみを提供します

  - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {

        if (property == kABPersonPhoneProperty) {

            ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
            CFIndex peopleIndex = ABMultiValueGetIndexForIdentifier(property, identifier);
            NSString *phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneProperty, peopleIndex);

            [self dismissModalViewControllerAnimated:YES];
        }
    return NO;
}
于 2013-11-22T10:16:35.937 に答える
0

そのように簡単に繰り返すことができます。そのコードを NSLoging して、動作することを確認してください。「選択」ロジックにいくつかのバグがあると思います。

ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);

for (CFIndex i=0; i < ABMultiValueGetCount(phones); i++) 
{
   NSString* phoneLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, i);
   NSString* phoneNumber = ABMultiValueCopyValueAtIndex(phones, i);

   //release variables since you were using COPY !!!
   CFRelease(phoneNumber);
   CFRelease(phoneLabel);
}

CFRelease(phones);
于 2013-11-22T09:59:32.397 に答える
0

このように実装することになりました:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
   if (property == kABPersonPhoneProperty)
    {
        ABMultiValueRef phones = ABRecordCopyValue(person, property);
        CFStringRef phoneNumber = ABMultiValueCopyValueAtIndex(phones, identifier);
        NSLog(@"%@", phoneNumber);
        NSMutableString *tmp = [NSMutableString stringWithFormat:@"%@", (__bridge_transfer NSString *)phoneNumber];
        NSString *strippedPhoneNumber = [tmp stringByReplacingOccurrencesOfString:@" " withString:@""];
        NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"()-"];
        strippedPhoneNumber = [[strippedPhoneNumber componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
        NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
        [peoplePicker dismissViewControllerAnimated:YES completion:nil];
        return NO;
}
于 2013-11-26T09:05:48.420 に答える