swift - 无法从通用函数中的 CNMutableContact 中删除项目

标签 swift generic-programming cncontact

我想允许用户在显示原始联系人后从联系人中删除元素(例如 CNPhoneNumberCNEmailAddresses),并根据他们的选择从我的联系人中删除编辑联系人。

即使我有一个可变联系人并使用我代码中键的可变数组,返回的已编辑联系人也不会删除该元素。

我在这里做错了什么?

这是我的通用函数(除了上面列出的问题外构建和运行良好)

private func removeFromEditedContact<T:NSString>(labeledValueType:T, with key:String,from contact:CNContact,to toContact:CNContact, at indexPath:IndexPath) -> CNContact {

    let mutableContact = toContact.mutableCopy() as! CNMutableContact


    //what detail are we seraching for in the contact
    if let searchingArray = contact.mutableArrayValue(forKey: key) as? [CNLabeledValue<T>] {
        let searchValue = searchingArray[indexPath.row].value
        //if detail is present in our mutable contact remove it
        var labeledValueToChange = mutableContact.mutableArrayValue(forKey: key) as? [CNLabeledValue<T>]

        if let index = labeledValueToChange?.index(where: {$0.value == searchValue})  {
            labeledValueToChange?.remove(at: index)

        }
    }
    return mutableContact
}

最佳答案

联系人未被修改,因为您只是从您创建的可变数组中删除值。从 labeledValueToChange 中删除此值后,您必须将其重新分配给联系人,如下所示:

contact.setValue(labeledValueToChange, forKey: key)

此外,如果原始联系人是您要修改的联系人,您可以直接将其作为 inout 参数传递给函数。我试过你的功能,它是这样工作的:

private func removeFromEditedContact<T:NSString>(labeledValueType:T, with key:String,from contact:inout CNMutableContact, at indexPath:IndexPath) -> CNMutableContact {

        //what detail are we seraching for in the contact
        if let searchingArray = contact.mutableArrayValue(forKey: key) as? [CNLabeledValue<T>] {

            let searchValue = searchingArray[indexPath.row].value
            //if detail is present in our mutable contact remove it
            var labeledValueToChange = contact.mutableArrayValue(forKey: key) as? [CNLabeledValue<T>]

            if let index = labeledValueToChange?.index(where: {$0.value == searchValue})  {
                labeledValueToChange?.remove(at: index)
            }


            contact.setValue(labeledValueToChange, forKey: key)
        }

        return contact
    }

关于swift - 无法从通用函数中的 CNMutableContact 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54662750/

相关文章:

ios - 具有动态 subview swift 的 UITableViewCell 高度

ios - 聊天登录不起作用?(quickblox)

c++ - 如何在 C++ 模板声明中声明函数

c++ - 使用一个参数初始化 boost::hana::tuple

ios - 如何在 CNContactViewController 中显示图片(forUnknownContact :)

string - Swift nil 可选字符串 = 空字符串

ios - 我的协议(protocol)和委托(delegate)不起作用?

ios - 使用 Swift IOS 在不同 ViewController 中的相同功能

ios - 如果应用程序在 iOS 上未激活,我怎么知道联系人已被修改?

ios - CNContact 获取联系人并将其导入 App 的示例