在保存请求之后,我需要一个新创建的联系人的标识符。用例:在我的应用程序中,用户创建一个新联系人并为他们提供一些属性(例如姓名、地址......),然后他可以保存联系人。此方案按方面工作。我的代码如下所示:
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)
}
}
联系对象 (uiContact) 只是 CNContact 的一个包装器。在关闭完成中,我需要返回标识符,但此时我无法访问它们,因为他是在写入过程之后由系统创建的。一种解决方案可能是使用谓词获取新保存的 CNContact
public func unifiedContactsMatchingPredicate(predicate: NSPredicate, keysToFetch keys: [CNKeyDescriptor]) throws -> [CNContact]
但这在我看来有点不干净,因为这个联系人可能只有一个名字,而且可能存在多个。带有创建标识符的回调之类的东西会很好。但是没有。有没有其他方法可以解决这个问题?