2016-07-20 16 views
1

Wenn ein Kontakt nur 1 Telefonnummer hat, möchte ich ihn auswählen. Wenn es mehr als 1 Telefonnummer hat, möchte ich die detaillierte Kontaktkarte anzeigen.Detaillierte Kontaktkarte anzeigen, wenn der Kontakt mehr als eine Telefonnummer hat

Ich verwende die folgende Methode, die gut funktioniert.

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

Dann habe ich dieses Dienstprogramm Methode implementieren Detaillierte Kontaktkarte anzuzeigen:

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

aber diese Methode nie aufgerufen wird? Wenn ich die erste Methode auskommentiere, wird die zweite Methode aufgerufen. Wie kann ich beide anrufen, oder gibt es einen anderen Weg, dies zu erreichen?

Antwort

0

Die Lösung ist, dies zu tun ein predicate hinzuzufügen ist, bevor die peoplePicker in diesem Fall ausgehend wäre es:

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

ähnlich bei Emailadressen, ersetzen: @"[email protected] = 1" mit @"[email protected] = 1".