2016-07-20 21 views
1

連絡先に電話番号が1つしかない場合は、それを選択します。 1つ以上の電話番号を持っている場合は、詳細な連絡先カードを表示します。連絡先に電話番号が2つ以上ある場合は詳細な連絡先カードを表示

私は以下の方法を使用していますが、これはうまくいきます。

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person { 

    if (person != nil) { 
     ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 
     if (ABMultiValueGetCount(phoneNumbers) == 1) { 
      //Do stuff to select phone number 
     } 
    } 
} 

その後、私は、詳細な連絡先カードを表示するために、このユーティリティメソッドを実装します。

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { 

    NSString* phone = nil; 
    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    if (ABMultiValueGetCount(phoneNumbers) > 0) { 
     CFIndex index = ABMultiValueGetIndexForIdentifier(phoneNumbers, identifier); 
     phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, index); 
    } 
} 

をしかし、このメソッドが呼び出されることは決してありませんか? 最初のメソッドをコメントアウトすると、2番目のメソッドが呼び出されます。どのように私は両方を呼び出すことができる、またはこれを達成する別の方法はありますか?

答えて

0

ソリューションは、これを行うことですが、それは次のようになり、この場合にpeoplePickerを開始する前predicateを追加することです:

-(void)getContacts { 
    ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init]; 
    peoplePicker.peoplePickerDelegate = self; 
    if ([peoplePicker respondsToSelector:@selector(setPredicateForSelectionOfPerson:)]) 
    { 
     // The people picker will select a person that has exactly one phone number and call peoplePickerNavigationController:didSelectPerson:, 
     // otherwise the people picker will present an ABPersonViewController for the user to pick one of the Phone Numbers. 
     peoplePicker.predicateForSelectionOfPerson = [NSPredicate predicateWithFormat:@"[email protected] = 1"]; 

    } 
    [self presentViewController:peoplePicker animated:NO completion:nil]; 
} 

同様emailAdressesの場合は、交換してください:@"[email protected] = 1"@"[email protected] = 1"を。

関連する問題