如何通过在 ios 中结合个人实体的名字和姓氏来对全名应用谓词

Posted

技术标签:

【中文标题】如何通过在 ios 中结合个人实体的名字和姓氏来对全名应用谓词【英文标题】:How to apply predicate on fullname by combining firstname & lastname of the person entity in ios 【发布时间】:2015-04-03 08:18:39 【问题描述】:

我在 coredata 中有“Person”实体,其中包含名字、中间名和姓氏。现在,我想对全名(fn、mn、ln 的组合)执行谓词搜索。全名不是实体的属性。我正在尝试使用 nsfetchresultcontroller 获取。例如,如果我搜索“Jone Smith”,它会显示为空白,但如果我搜索“John”,它会显示记录。请回复。

【问题讨论】:

你找到答案了吗? 这能回答你的问题吗? How to join two strings for NSPredicate, ie firstname and lastname 【参考方案1】:

可能有多种解决方案。其中之一是当我们试图找到一个全名的人时,我们不确定用户输入姓名Name and LastnameLastname and Name 的顺序。

斯威夫特 5.0


// First we make components from incoming search text `searchText`
let text = searchText.trimmingCharacters(in: .whitespaces)
let nameComponents = searchText.components(separatedBy: .whitespacesAndNewlines).compactMap  $0.isEmpty ? nil : $0 

// Next we create predicate trying to find each component in name or lastname
let predicates = nameComponents.map  NSPredicate(format: "name contains[c] %@ OR lastname contains[c] %@", $0,$0) 

// Create `And` predicate
let andPredicate = NSCompoundPredicate.init(andPredicateWithSubpredicates: predicates)

// Use predicates in created `request`
request.predicate = andPredicate

同样,也可以使用中间名。

【讨论】:

【参考方案2】:

假设字段名称为:fName、lName。那么谓词将是:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"fName = %@ and lName = %@", inputFName, inputLName)]

【讨论】:

什么是 inputFName 和 inputLName? sn-p 不完整。请详细说明。我的问题是当我尝试搜索为“John”或“Smith”时,我得到了结果,但是当我输入“John”或“John Smith”时,我没有得到任何结果。 FN、Mn 和 LN 应结合使用。如何做到这一点? 为什么要投反对票?当你说它不起作用时,你能详细说明发生了什么吗?

以上是关于如何通过在 ios 中结合个人实体的名字和姓氏来对全名应用谓词的主要内容,如果未能解决你的问题,请参考以下文章

如何持久化实体类中的数据并结合数据传输对象?

实体信用卡读卡器可以识别名字和姓氏吗? [关闭]

Laravel 采摘但结合名字+姓氏进行选择

如何通过意图添加具有名字和姓氏的联系人

如何通过意图添加具有名字和姓氏的联系人

在 iOS9 CloudKit / ABPerson (ABAAddressBook) 中查找用户名或名字/姓氏