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