首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LHS和RHS都是keypath

LHS和RHS都是keypath
EN

Stack Overflow用户
提问于 2014-04-19 05:15:59
回答 2查看 1.2K关注 0票数 1

正在尝试查找prospectiveTenant与所有搜索查询都匹配的active guestCards。可能的方式有firstNamelastNamephoneNumber

guestCard上,prospectiveTenants是一个多对多的。

这段代码:

代码语言:javascript
复制
NSString *predicateString = [NSString stringWithFormat: @"active=1"];
if (self.searchHeader.firstNameTextField.text.length > 0) {
    predicateString = [predicateString stringByAppendingFormat:@" AND (ANY prospectiveTenants.firstName CONTAINS[cd] %@)", self.searchHeader.firstNameTextField.text];
}
if (self.searchHeader.lastNameTextField.text.length > 0)
{
    predicateString = [predicateString stringByAppendingFormat:@" AND (ANY prospectiveTenants.lastName CONTAINS[cd] %@)", self.searchHeader.lastNameTextField.text];
}
if (self.searchHeader.phoneNumberTextField.text.length > 0)
{
    predicateString = [predicateString stringByAppendingFormat:@" AND (ANY prospectiveTenants.phone CONTAINS[cd] %@)", self.searchHeader.phoneNumberTextField.text];
}

NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
[self.fetchedResultsController.fetchRequest setPredicate:predicate];

产生此错误

代码语言:javascript
复制
'unimplemented SQL generation for predicate : (ANY prospectiveTenants.lastName CONTAINS[cd] S) (LHS and RHS both keypaths)'
EN

回答 2

Stack Overflow用户

发布于 2014-04-19 05:18:48

啊哈。

所以看起来predicateWithFormat做了一些特殊的工作来确保在字符串两边插入引号。应该是显而易见的。

票数 7
EN

Stack Overflow用户

发布于 2017-02-19 09:29:43

为了能够使用NSPredicate初始化所做的工作,请尝试将格式字符串和要放入字符串中的值构建为两个变量,然后在创建NSPredicate时同时传递这两个变量。

这样做的好处是可以处理NSPredicate可能想做的任何其他特殊工作。

在Swift中重写,这将变成:

代码语言:javascript
复制
var predicateString = "active=1"
var predicateParameters = [Any]()

if !self.searchHeader.firstNameTextField.text.isEmpty {
    predicateString.append(" AND (ANY prospectiveTenants.firstName CONTAINS[cd] %@)")
    predicateParameters.append(self.searchHeader.firstNameTextField.text)
}
if !self.searchHeader.lastNameTextField.text.isEmpty {
    predicateString.append(" AND (ANY prospectiveTenants.lastName CONTAINS[cd] %@)")
    predicateParameters.append(self.searchHeader.lastNameTextField.text)
}
if !self.searchHeader.phoneNumberTextField.text.isEmpty {
    predicateString.append(" AND (ANY prospectiveTenants.phone CONTAINS[cd] %@)")
    predicateParameters.append(self.searchHeader.phoneNumberTextField.text)
}

let predicate = NSPredicate(format: predicateString, argumentArray:predicateParameters)
self.fetchedResultsController.fetchRequest.predicate = predicate
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23162486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档