首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOS9如何找出两个CNContact之间的差异?

IOS9如何找出两个CNContact之间的差异?
EN

Stack Overflow用户
提问于 2016-03-08 13:21:14
回答 1查看 715关注 0票数 0

我试图通过新的框架联系人和ContactsUI on IOS9来操作联系人。我需要找到确切的差异后,最终用户改变他们的信息,如电话号码或电子邮件,即,找出最终用户做了他们的通讯录为指定的联系方式。

如果联系人对每个项目都有不同的标签(电话/电子邮件),就会更容易。但是,如果电话或电子邮件有相同的标签,我不知道如何获取差异,例如:

电话:家庭: 123-456办公室: 223-456办公室: 456-334电子邮件:电子邮件: 124@email.com电子邮件: 345@google.com

更改后,新信息可以是: John: phone: home: 123-456 office: 223-889 (更改项) office: 456-377 (更改项)电子邮件: 1241111@email.com (更改项)电子邮件: 3451111@google.com (更改项)

使用ContactsUI,我可以在更改之前和之后捕获两个联系人对象。

问题是,如何找到这些变化?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-03-08 14:11:32

假设您知道如何迭代新的phoneNumbersemails以及旧的数组。您可以比较旧的和新的联系人对象之间的标签和值对,并确定是否存在新的对。

一些未经测试的代码:

代码语言:javascript
复制
func findOutContactDifference() {
  // Assume you already have the two contact objects
  let oldContact : CNContact = ...
  let newContact : CNContact = ...

  // Get list of phoneNumbers out
  let oldPhoneNumbers = oldContact.phoneNumbers
  let newPhoneNumbers = newContact.phoneNumbers

  // Iterate through the new phoneNumbers array
  for aNewPhoneNumber in newPhoneNumbers { // Type of aNewPhoneNumber will be CNLabeledValue
    let newPhoneLabel = aNewPhoneNumber.label // This will be a string
    let newPhoneNumber = aNewPhoneNumber.value as! CNPhoneNumber // You have to cast as specified in the document

    let thisPhoneNumberAlreadyExisted = phoneNumberExisted(newPhoneLabel, newNumber : newPhoneNumber, oldPhoneNumbers : oldPhoneNumbers)
    if (!thisPhoneNumberAlreadyExisted) {
      // This is a new phone number!!
      let brandNewNumber = newPhoneNumber
    }
  }

  // Do the similar thing for email
  // Beaware that cast for email.value will just be String
  // ...
}

/// Will return whether the input pair already existed in the old list
func phoneNumberExisted(newLabel : String, newNumber : CNPhoneNumber, oldPhoneNumbers : [CNLabeledValue]) -> Bool {
  for anOldPhoneNumber in oldPhoneNumbers {
    let oldLabel = anOldPhoneNumber.label
    let oldNumber = anOldPhoneNumber.value as! CNPhoneNumber

    if oldLabel == newLabel && oldNumber == newLabel {
      return true // Found a matched pair
    }
  }
  return false // Nothing matched
}

==========

CNLabeledValue value属性参考

联系人属性值,例如电话号码的CNPhoneNumber,电子邮件地址的NSString等等。有关有效值,请参阅CNContact属性,这些属性是标记值对象的数组。

编辑

CNLabeledValue identifier属性参考

建议在重取联系人中搜索以前已知的标记值对象时使用该标识符。标识符可以是持久化在应用程序启动之间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35868567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档