正在尝试查找prospectiveTenant与所有搜索查询都匹配的active guestCards。可能的方式有firstName、lastName、phoneNumber。
在guestCard上,prospectiveTenants是一个多对多的。
这段代码:
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];产生此错误
'unimplemented SQL generation for predicate : (ANY prospectiveTenants.lastName CONTAINS[cd] S) (LHS and RHS both keypaths)'发布于 2014-04-19 05:18:48
啊哈。
所以看起来predicateWithFormat做了一些特殊的工作来确保在字符串两边插入引号。应该是显而易见的。
发布于 2017-02-19 09:29:43
为了能够使用NSPredicate初始化所做的工作,请尝试将格式字符串和要放入字符串中的值构建为两个变量,然后在创建NSPredicate时同时传递这两个变量。
这样做的好处是可以处理NSPredicate可能想做的任何其他特殊工作。
在Swift中重写,这将变成:
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 = predicatehttps://stackoverflow.com/questions/23162486
复制相似问题