【问题标题】:NSPredicate with CNContact not working带有 CNContact 的 NSPredicate 不起作用
【发布时间】:2016-04-18 20:59:32
【问题描述】:

您好,我正在尝试过滤我的联系人,在模拟器 xcode 中一切正常,但是当我在 iPhone 上尝试时,我遇到了正则表达式谓词的问题。有什么建议么 ?。非常感谢。

func updateSearchResultsForSearchController(searchController: UISearchController) {

    self.filteredContacs.removeAll(keepCapacity: false)
        let searchPredcate = NSPredicate(format: "givenName contains[c] %@ OR familyName contains[c] %@",searchController.searchBar.text!)
    let array = (self.contacts as NSArray).filteredArrayUsingPredicate(searchPredcate)
    self.filteredContacs = array as! [CNContact]

    self.tableViewContacts.reloadData()

}

【问题讨论】:

    标签: ios swift contacts


    【解决方案1】:

    您可以为此使用 CNContact 谓词。

    - (NSArray*)searchContactsMatchingName:(NSString*)pSearchName andKeysToFetch:(NSArray*)pKeysToFetch 
    {
        NSError *pError = nil;
        NSPredicate *pPredicate    = [CNContact predicateForContactsMatchingName:pSearchName];
        CNContactStore *pStore     = [[CNContactStore alloc] init];
        NSArray *pResults          = [pStore unifiedContactsMatchingPredicate:pPredicate keysToFetch:pKeysToFetch error:&pError];
    
        return pResults;
    }
    

    【讨论】:

    • 注意,这也会返回与组织名称或昵称匹配的联系人。如果您只想要第一个/最后一个结果,那么我在stackoverflow.com/questions/32665605/… 中发现文档状态:“请注意,Contacts 框架不支持通用和复合谓词。”所以唯一的方法是获取匹配名字/姓氏的联系人是使用此答案,然后手动过滤结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多