2016-03-11 115 views
3

我正在开发一个应用程序,其中显示了一些来自服务器的联系人,目前我正在排序服务器中的联系人,但现在我想要从联系人设置中读取联系人IOS - >设置 - >联系人 - >显示顺序使用新的联系人框架,我没有看到任何API直接查询系统设置,没有创建任何我不想做的联系人对象我只想查询系统设置而不创建任何联系对象。如何查询IOS联系人联系人使用新联系人框架显示订单设置

即时通讯能够使用下面的代码来查询排序设置,但没有equivlent的显示顺序

let sortContact = CNContactsUserDefaults.sharedDefaults().sortOrder 
+0

你是什么意思创建一个联系对象?您的代码看起来不像创建联系人对象。 – bcamur

回答

3

我在完全相同的问题,运行一些天前的单一解决方案,发现是创建一个伪造的接触(注意,我并没有把它保存在地址簿中),您可以查看下面的代码:

let fakeContact = CNContact() 
let displayOrder = CNContactFormatter.nameOrderForContact(fakeContact) 
print("Display order : \(displayOrder.rawValue)") 
1

如果您已经列举过接触,就不用创建假的接触。您可以直接使用@ user6295172建议的第二行。以下是我们项目中的一个例子。

public func enumerateContacts() -> Void { 
    let contactStore = CNContactStore() 
    let filterFields = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName), CNContactPhoneNumbersKey] as [Any] 
    let fetchRequest = CNContactFetchRequest(keysToFetch: filterFields as! [CNKeyDescriptor]) 

    do { 
     try contactStore.enumerateContacts(with: fetchRequest) { contact, stop in 
      if contact.phoneNumbers.count == 0 { 
       // No phone number associated with the contact 
       // worth skipping it or do what you feel like 
      } 

      if CNContactFormatter.nameOrder(for: contact).rawValue == 0 { 
       print(contact.identifier, " : ", contact.familyName, contact.givenName) 
      } else { 
       print(contact.identifier, " : ", contact.givenName, contact.familyName) 
      } 


      for phone in contact.phoneNumbers { 
       print(phone.identifier, " : ", phone.value.stringValue) 
      } 

      print("\n") 
     } 
    } catch let err { 
     print(err) 
    } 
} 
相关问题