核心数据和 NSPredicate
Posted
技术标签:
【中文标题】核心数据和 NSPredicate【英文标题】:Core Data and NSPredicate 【发布时间】:2014-07-13 17:12:16 【问题描述】:我正在寻找一种使用 NSPredicate 设置“beginswith [cp]”条件来获取对象的方法。在数据模型中有一个包含 4 个基本属性的实体。第一个属性的名称是 cityName。目标是查找 cityName 以给定字符开头的记录,但我不确定如何格式化谓词。 这是我的代码的一部分
NSString * lastCharacter = [userCity substringFromIndex:[userCity length] -1];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context =
[appDelegate managedObjectContext];
NSEntityDescription *entityDesc =
[NSEntityDescription entityForName:@"Cities"
inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(cityName = beginswith [cp] %@ )", lastCharacter];
[request setPredicate:pred];
但对于此代码,我收到以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(cityName = beginswith [cp] %@ )"'
【问题讨论】:
在我看来问题出在 lastCharacter 的值上。 【参考方案1】:问题在于beginswith
是一个运算符,所以= beginswith
是一个太多了。谓词中的括号也不是必需的。因此:
[NSPredicate predicateWithFormat:@"cityName beginswith[cd] %@", lastCharacter];
【讨论】:
我的代码的第一部分是正确的。要获取字符串的最后一个字符,必须使用 [string substringFromIndex:[string length] -1]。对于第二部分,您的回答帮助我解决了我的问题。【参考方案2】:只需像这样更改您的谓词:-
NSPredicate *pred = [NSPredicate predicateWithFormat:@"cityName contains[cd] %@",lastCharacter];
【讨论】:
以上是关于核心数据和 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章