如何使用Contacts框架保存联系人

时间:2016-06-09 08:05:01

标签: ios swift ios9 contacts

在我的应用程序中,我在按钮点击事件中保存联系人。所以点击按钮可以保存适当的联系方式。但当我试图按下另一个按钮而不是保存该数据时,显示错误的联系。那我怎么解决这个问题呢?

这是我的代码

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


}

请让我知道如何解决这个问题?

1 个答案:

答案 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)")
    }
}