2017-12-07 4 views
1

ich ein Programm schreibt, dass der Benutzer in Kontakt mit den CNContactPickerViewController mit holen kann. Wenn der ausgewählte Kontakt tut NOT eine zugehörige Telefonnummer hat, mag ich es mit einem Fehler popover haben und auf die ContactPickerViewController zurück, wenn sie ok getroffen. Ich habe den Code mit Breakpoints durchlaufen und es wird korrekt ausgeführt, es wird jedoch kein Fehler angezeigt.prüfen, wenn der Benutzer der Telefonnummer in CNContactStore und aktuellen Fehler popover

Ich kann nicht für das Leben von mir herauszufinden, warum ... hier ist mein Code:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) { 

    if contact.phoneNumbers.first?.value.stringValue != nil{ 
     //@TODO: check for repeats in people array 

     // do something with contact 
     let newPerson = Person(firstName: contact.givenName, 
           lastName: contact.familyName, 
           profileImage: #imageLiteral(resourceName: "capitalizing_on_the_economic_potential_of_foreign_entrepreneurs_feature.png")) 

     if contact.imageDataAvailable == true{ 
      newPerson.profileImage = UIImage(data: contact.imageData!)! 
     } 

     // this is for the full name 
     let fullname = "\(contact.givenName) \(contact.familyName)" 
     print("The selected name is: \(fullname)") 
     let phoneNum = contact.phoneNumbers.first?.value.stringValue 
     print("The selected phone num is: \(phoneNum!)") 

     //appends data to new activity model for prep to send back to home vc 
     newActivity.people.append(newPerson) 
     print("the people in the new activity array are: \(newActivity.people)") 

     peopleCollection.reloadData() 

    } else { 
     print("error has no number") 
     let alertController = UIAlertController(title: "Error: Person has no number!", message: "", preferredStyle: .alert) 
     let confirmAction = UIAlertAction(title: "Ok", style: .default, handler: { 
      alert -> Void in 
     }) 
     //add actions to alert sheet 
     alertController.addAction(confirmAction) 
     self.present(alertController, animated: true, completion: nil) 
     //the code executes here correctly, but it does not present the alertController 
    } 
    //this is for phone number without dashes 
    //print("the selected phone number is: \((contact.phoneNumbers[0].value).value(forKey: "digits") as! String)") 
} 
+0

Edit: die letzte benötigte uncommented Linie picker.present werden (alertController, animiert: true, Abschluss: null), so dass es dem Kommissionierer nicht selbst präsentiert über. Wie auch immer, jetzt habe ich ein anderes Problem, bei dem die AlertView einfach von selbst verschwindet, ohne darauf zu warten, dass der Benutzer auf OK klickt. Es bleibt etwa eine Sekunde lang stehen. Wie bekomme ich es, bis der Benutzer auf OK klickt? –

Antwort

0

Warum Sie nicht den Benutzer begrenzen nur Telefonnummern wählen? Sie können auch alle anderen Felder verstecken, so werden sie entweder Telefonnummern oder nichts in dem Fall, dass der Kontakt keine haben hier (die sie an einen anderen Kontakt zu gehen ... verursacht) Überprüfen Sie die Antwort, es erwähnt auch die Filterung zu Telefonnummern nur: Contact Address book crash on iOS 10 beta In diesem Fall wird die didSelect Funktion nur aufgerufen werden, wenn eine Telefonnummer gewählt wird.

Verwandte Themen