我正在开发一个应用程序,我在服务器上显示一些联系人,目前我正在从服务器排序联系人,但现在我想从IOS阅读联系人设置 - >设置 - >联系人 - >显示订单使用新的Contact框架,我没有看到任何api直接查询系统设置而没有创建任何我不想做的联系对象我只想查询系统设置而不创建任何联系对象。
我可以使用下面的代码查询排序设置,但显示顺序
没有特色let sortContact = CNContactsUserDefaults.sharedDefaults().sortOrder
答案 0 :(得分:3)
我几天前遇到了完全相同的问题,找到的单一解决方案是创建一个虚假联系人(注意我没有将其保存在地址簿中),您可以查看以下代码:
import {HTTP_PROVIDERS, Http} from 'angular2/http';
答案 1 :(得分: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)
}
}
答案 2 :(得分:1)
如果仅用于显示名称,则可以使用PersonNameComponentsFormatter
:
var nameComponents = PersonNameComponents()
nameComponents.givenName = "Mihai"
nameComponents.lastName = "Radu"
print(PersonNameComponentsFormatter.localizedString(from: nameComponents, style: .default, options: []))
根据文档,这考虑了当前语言环境的名称顺序规则,但允许用户首选项覆盖它。