首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问通讯录时出现重复

访问通讯录时出现重复
EN

Stack Overflow用户
提问于 2016-02-27 18:37:45
回答 1查看 122关注 0票数 0

由于某些原因,我不断地在我的代码能够访问的许多联系人上得到重复的内容。有什么原因吗?

代码语言:javascript
复制
var error: Unmanaged<CFError>?
addressBook = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()


   if let people = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(self.addressBook, nil, ABPersonSortOrdering(kABPersonSortByFirstName)).takeRetainedValue() as? NSArray {
        for record in people {
            //var contactPerson: ABRecordRef = record
            var contactName: String = ABRecordCopyCompositeName(record).takeRetainedValue() as String


            var number = ""

            var phones: ABMultiValueRef = ABRecordCopyValue(record, kABPersonPhoneProperty).takeRetainedValue()

            for j in 0..<ABMultiValueGetCount(phones) {
                number = ABMultiValueCopyValueAtIndex(phones, j).takeRetainedValue() as! String
                break
            }

            if (number != "") {
                var newPerson = personInfo(name: contactName, number: number)
                allContacts.append(newPerson)
            }


           self.tableView.reloadData()
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2016-02-27 20:22:33

James Richards请使用联系人框架,而不是使用通讯录。

首先,您应该通过构建阶段->将二进制文件与库链接->添加(单击+)->choose联系人框架来添加联系人框架

代码语言:javascript
复制
import Contacts 

然后

代码语言:javascript
复制
let status = CNContactStore.authorizationStatusForEntityType(.Contacts)
if status == .Denied || status == .Restricted {
        // user previously denied, so tell them to fix that in settings
        return
}

// open it

let store = CNContactStore()
store.requestAccessForEntityType(.Contacts) { granted, error in
        guard granted else {
            dispatch_async(dispatch_get_main_queue()) {
                // user didn't grant authorization, so tell them to fix that in settings
                print(error)
            }
            return
}

// get the contacts

var contacts = [CNContact]()
let request = CNContactFetchRequest(keysToFetch:[CNContactIdentifierKey, CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName)])
   do {
      try store.enumerateContactsWithFetchRequest(request) { contact, stop in
                contacts.append(contact)
         }
   } 
   catch {
            print(error)
         }

        // do something with the contacts array (e.g. print the names)

        let formatter = CNContactFormatter()
        formatter.style = .FullName
        for contact in contacts {
            print(formatter.stringFromContact(contact))
        }
 }

输出结果

代码语言:javascript
复制
Optional("John Appleseed")
Optional("Kate Bell")
Optional("Anna Haro")
Optional("Daniel Higgins Jr.")
Optional("David Taylor")
Optional("Hank M. Zakroff")

Link 1

Apple Document

Contacts

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

https://stackoverflow.com/questions/35668664

复制
相关文章

相似问题

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