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

Tea*_*App 4 objective-c nspredicate ios

我已经解决了我的问题[盲目]而没有理解根本原因.但我宁愿理解专业人士的概念.那么请你告诉我为什么下面相同的代码有效,但另一个没有.

代码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...
Run Code Online (Sandbox Code Playgroud)

代码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...
Run Code Online (Sandbox Code Playgroud)


忘了告诉我有什么错误,我在下面的行上有SIGABRT,当我执行Code 1时.

 self.people = [self.managedObjectContext executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)

还有一件事,在GCC错误中,由于"gender == m",它无法格式化谓词.


开导我!!

谢谢

jrt*_*ton 10

请参阅谓词编程指南(标题为"文字").您可以在字符串中使用文字,但必须将它们用引号括起来,所以

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"gender == 'm'"];
Run Code Online (Sandbox Code Playgroud)

会有效的.当predicateWithFormat在参数中添加时,它知道它是一个字符串.当你只是有在那里,不知道该怎么做了,因此错误.