【问题标题】:Unable to update a contact's phone number in Swift无法在 Swift 中更新联系人的电话号码
【发布时间】:2018-04-09 16:38:22
【问题描述】:

在发布这个问题之前浏览了许多博客、问题和文章。我无法使用 Swift 中的联系人框架更新联系人的电话号码。

let store = CNContactStore()
OperationQueue().addOperation{[store] in
let predicate = CNContact.predicateForContacts(matchingName: "XYZ")
let toFetch = [CNContactPhoneNumbersKey, CNContactGivenNameKey]

        do{
            let contacts = try store.unifiedContacts(matching: predicate,
                                                     keysToFetch: toFetch as [CNKeyDescriptor])

            for Contact in contacts{
                let XYZ = Contact.mutableCopy() as! CNMutableContact
                print("Name: ", XYZ.givenName)
                print(XYZ.phoneNumbers.count)
                for CNPhoneNumber in XYZ.phoneNumbers{
                    print("Phone number: ", CNPhoneNumber.value)
                    var text = CNPhoneNumber.value.stringValue
                    let matchText = text.starts(with: "011 91")
                    if(matchText == true){
                        let start = text.index(text.startIndex, offsetBy: 0);
                        let end = text.index(text.startIndex, offsetBy: 8);
                        text.replaceSubrange(start..<end, with: "+91")
                        print("Replaced number: ",text)
                    } else{
                        print("Phone number is not starting with 011 91")
                    }
                    let phoneNumber = CNLabeledValue(label: CNLabelPhoneNumberiPhone, value:CNPhoneNumber(stringValue: text))
                    XYZ.phoneNumbers[0] = phoneNumber

                    let req = CNSaveRequest()
                    req.update(XYZ)
                    try store.execute(req)
                }
            }
        }
         catch let err{
            print(err)
        }
    }

【问题讨论】:

  • 启发我们,运行您的代码后会发生什么?
  • 添加了错误详情。由于该错误,构建失败。

标签: swift contacts-framework


【解决方案1】:

找到罪魁祸首

CNPhoneNumber 更改为任何其他有效文字

for CNPhoneNumber in daddy.phoneNumbers

for phoneNumber in daddy.phoneNumbers
//change the rest of the for-in loop accordingly

原因是,上面的代码部分将CNPhoneNumber 声明为CNLabeledValue&lt;CNPhoneNumber&gt; 对象,并且错误告诉您您尝试调用非函数类型对象CNLabeledValue&lt;CNPhoneNumber&gt; 的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多