objective-c - NSPredicate - 无法为谓词生成 SQL,我想知道为什么?

标签 objective-c ios nspredicate

我已经在不了解根本原因的情况下[盲目]解决了我的问题。但我宁愿从专业人士那里了解一个概念。那么您能否告诉我为什么下面相同的代码一个有效而另一个无效。

代码 1:不起作用

//Above code omitted...

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"gender == m"]; //NOTICE HERE
[request setPredicate:predicate];   
NSError *error = nil;
self.people = [self.managedObjectContext executeFetchRequest:request error:&error];

 //Below code omitted...

代码 2:有效

//Above code omitted...

NSString *type = @"m";    
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"gender == %@",type]; //NOTICE HERE
[request setPredicate:predicate];   
NSError *error = nil;
self.people = [self.managedObjectContext executeFetchRequest:request error:&error];

//Below code omitted...


忘了告诉我遇到了什么错误,当我执行代码 1 时,我在下面一行得到了 SIGABRT。

 self.people = [self.managedObjectContext executeFetchRequest:request error:&error];

还有一件事,在 GCC 中错误是它无法格式化谓词,因为“gender == m”。


开导我!!

谢谢

最佳答案

参见 predicate programming guide (标题为“文字”)。您可以在字符串中使用文字,但必须将它们括在引号中,所以

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"gender == 'm'"];

本来可以的。当 predicateWithFormat 添加参数时,它知道它是一个字符串。当您只有 m 时,它不知道如何处理它,因此会出现错误。

关于objective-c - NSPredicate - 无法为谓词生成 SQL,我想知道为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7662111/

相关文章:

ios - UIButton 的动画背景颜色从白色变为红色

iphone - 无法将 UITableViewCell didSelectRowAtIndexPath 数据传递给另一个 View Controller

ios - 使用关键字过滤数组

ios - Xcode8/Swift 3 更新后缺少 Firebase header 警告

ios - 核心数据,根据对象自身属性搜索对象

ios - 获取多对多关系包含所有术语的实体

objective-c - 将 NSString append 到 NSURL?

iphone - iphone中从屏幕底部向上滑动并有多种选择的元素叫什么?

objective-c - 灵活空间与固定空格键按钮项目

ios - 如何处理 %s 格式说明符