2016-05-23 77 views
0

是否可以使用AddressBook和联系人框架根据组织名称或职位名称获取特定联系人信息或联系人信息列表?根据组织名称或工作标题获取iOS联系人列表

+0

请务必阅读本,努力提高你的问题:http://stackoverflow.com/help/mcve –

+0

如果任何人有一个更好的解决办法,请在下面添加 –

回答

2

我不这么认为,您只需在谓词中给出组织名称或职位即可从CNContact存储中获取联系人。您应该在密钥中包含组织名称和职位名称,然后重新访问联系人列表。检查代码片段。我希望它有帮助。谢谢。

func fetchContacts() 
{ 
let contactStore = CNContactStore() 
var allContainers : [CNContainer] = [] 
var allContacts : [CNContact] = [] 

//you can use one of these/ all keys to filter contacts 
let keysToFetch = [CNContactGivenNameKey, CNContactOrganizationNameKey, CNContactJobTitleKey] 
     var OrganizationArray = [CNContact]() 
     do{ 
      // _______________ Fetch all the Containers_________________________________ 
      allContainers = try contactStore.containersMatchingPredicate(nil) 

     } 
     catch{ 
      print(error) 
     } 
     for container in allContainers{ 
      let fetchPredicate = CNContact.predicateForContactsInContainerWithIdentifier(container.identifier) 
      do{ 
       //____________Fetch all the contacts corresponding to every Container______ 
       let containerResults = try contactStore.unifiedContactsMatchingPredicate(fetchPredicate, keysToFetch: keysToFetch) 
       // allContacts.appendContentsOf(containerResults) 


           for contactRec in containerResults { 
            if contactRec.organizationName != "" { 
             OrganizationArray.append(contactRec) 
            } 

           } 

      } 
      catch{ 
       print(error) 
      } 
     } 
} 
+0

你的答案这个我知道,我是希望有一些其他方式可以基于自定义标签获取特定联系人,而不是基于名称属性。如果我们按照此方法,则必须遍历设备中可用的所有联系人以获取或更新特定联系人。 –

+0

据我所知,您可以根据联系人姓名,联系人标识符,容器和组获取联系人。苹果公司没有提供其他物业的预测。我认为你必须遍历所有的联系人。 – Jush

+0

看起来没有选择。 –