在我的应用程序中,我在按钮点击事件中保存联系人。所以点击按钮可以保存适当的联系方式。但当我试图按下另一个按钮而不是保存该数据时,显示错误的联系。那我怎么解决这个问题呢?
这是我的代码
let fooBar = CNMutableContact()
var store = CNContactStore()
在indexpath的cellforrow中
cell.btnClick.tag = indexPath.row
cell.btnClick.addTarget(self, action: #selector(ViewController.buttonInsertPressed(_:)), forControlEvents: UIControlEvents.TouchUpInside)
func buttonInsertPressed(sender:UIButton) {
getData()
let index = sender.tag
print(fooBar)
phone = dic.valueForKey("mobile").objectAtIndex(index) as! String
print(phone)
// fooBar.givenName = dic.valueForKey("name").objectAtIndex(indexPath.row) as! String
let name : String = dic.valueForKey("name").objectAtIndex(index) as! String
print(fooBar.givenName)
let homePhone = CNLabeledValue(label: CNLabelHome,
value: CNPhoneNumber(stringValue: phone))
fooBar.setValue(name, forKey: "givenName")
fooBar.setValue([homePhone], forKey: "phoneNumbers")
// fooBar.phoneNumbers = [homePhone]
print(fooBar)
fooBar.middleName = "A."
fooBar.familyName = "Bar"
// fooBar.nickname = "Fooboo"
if #available(iOS 9.0, *) {
switch CNContactStore.authorizationStatusForEntityType(.Contacts){
case .Authorized:
createContact()
case .NotDetermined:
store.requestAccessForEntityType(.Contacts){succeeded, err in
guard err == nil && succeeded else{
return
}
self.createContact()
}
default:
print("Not handled")
if let url = NSURL(string: "tel://\(phone)") {
UIApplication.sharedApplication().openURL(url)
}
}
} else {
if let url = NSURL(string: "tel://\(phone)") {
UIApplication.sharedApplication().openURL(url)
}
// Fallback on earlier versions
}
}
func createContact()
{
let request = CNSaveRequest()
request.addContact(fooBar, toContainerWithIdentifier: nil)
do{
try store.executeSaveRequest(request)
print("Successfully stored the contact")
if let url = NSURL(string: "tel://\(phone)") {
UIApplication.sharedApplication().openURL(url)
}
} catch let err{
print("Failed to save the contact. \(err)")
if let url = NSURL(string: "tel://\(phone)") {
UIApplication.sharedApplication().openURL(url)
}
}
}
请让我知道如何解决这个问题?
答案 0 :(得分:0)
请遵循以下方法
100%工作解决方案
public func askPermissionForContacts(callBack:(Bool)->())
{
let status : CNAuthorizationStatus = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contacts)
if status == CNAuthorizationStatus.NotDetermined{
store.requestAccessForEntityType(CNEntityType.Contacts, completionHandler: { (temp: Bool, error : NSError?) -> Void in
if temp == true{
callBack(true)
}else
{
callBack(false)
}
})
}else if status == CNAuthorizationStatus.Authorized {
callBack(true)
}
else if status == CNAuthorizationStatus.Denied {
callBack(false)
}
}
public func createAndSaveContact(userData : AnyObject)
{
let userDict = userData as! NSDictionary
let contactNew = CNMutableContact()
let homePhone = CNLabeledValue(label: CNLabelHome, value: CNPhoneNumber(stringValue: userDict.objectForKey("contact_phone") as! String))
let homeEmail = CNLabeledValue(label:CNLabelHome, value: userDict.objectForKey("contact_email") as! String)
contactNew.givenName = userDict.objectForKey("contact_name") as! String
contactNew.phoneNumbers = [homePhone]
contactNew.emailAddresses = [homeEmail]
let request = CNSaveRequest()
request.addContact(contactNew, toContainerWithIdentifier: nil)
do{
try store.executeSaveRequest(request)
print("Done")
} catch let err{
print("Failed to save the contact. \(err)")
}
}