Ich brauche die Kennung eines neu erstellten Kontakts direkt nach der Speicheranforderung. Der Anwendungsfall: In meiner App erstellt ein Benutzer einen neuen Kontakt und gibt ihm einige Attribute (zB Name, Adresse ...), danach kann er den Kontakt speichern. Dieses Szenario funktioniert wie erwartet. Mein Code sieht wie folgt aus:iOS9 Contacts Framework erhält Identifikator von neu gespeicherten Kontakt
func createContact(uiContact: Contact, withImage image:UIImage?, completion: String -> Void)
{
let contactToSave = uiContact.mapToCNContact(CNContact()) as! Cnmutablecontawctlet
if let newImage = image
{
contactToSave.imageData = UIImageJPEGRepresentation(newImage, 1.0)
}
request = CNSaveRequest()
request.addContact(contactToSave, toContainerWithIdentifier: nil)
do
{
try self.contactStore.executeSaveRequest(request)
print("Successfully saved the CNContact")
completion(contactToSave.identifier)
}
catch let error
{
print("CNContact saving faild: \(error)")
completion(nil)
}
}
Das Objekt (uiContact) ist nur ein Wrapper von CNContact. Im Abschlussabschluss muss ich den Identifier zurückgeben, aber zu dieser Zeit habe ich keinen Zugriff darauf, weil er vom System nach dem Schreibvorgang erstellt wird. Eine Lösung könnte die neu gespeicherte CNContact mit Prädikat
public func unifiedContactsMatchingPredicate(predicate: NSPredicate, keysToFetch keys: [CNKeyDescriptor]) throws -> [CNContact]
aber das scheint mir wie ein bisschen unsauber, da dieser Kontakt nur einen Namen haben könnte und mehr zu holen, als man existieren könnte. So etwas wie ein Callback mit der erstellten Kennung wäre nett. Aber da ist es nicht. Gibt es eine andere Möglichkeit, dieses Problem zu lösen?