Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSPredicate-无法为谓词生成SQL,我想知道为什么?_Objective C_Ios_Nspredicate - Fatal编程技术网

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

Objective c NSPredicate-无法为谓词生成SQL,我想知道为什么?,objective-c,ios,nspredicate,Objective C,Ios,Nspredicate,我已经[盲目地]解决了我的问题,却不了解根本原因。但我更愿意从专业人士那里理解一个概念。所以,你能告诉我为什么在相同的代码下,一个可以工作,而另一个不能 代码1:不起作用 //Above code omitted... NSPredicate * predicate = [NSPredicate predicateWithFormat:@"gender == m"]; //NOTICE HERE [request setPredicate:predicate]; NSError *err

我已经[盲目地]解决了我的问题,却不了解根本原因。但我更愿意从专业人士那里理解一个概念。所以,你能告诉我为什么在相同的代码下,一个可以工作,而另一个不能

代码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...
//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...
代码2:是否有效

//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...
//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”


开导我

谢谢

请参阅(标题“文字”)。您可以在字符串中使用文字,但必须将它们括在引号中,因此

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"gender == 'm'"];
那就行了。当predicateWithFormat添加到参数中时,它知道它是一个字符串。当你只有m在那里时,它不知道如何处理它,因此产生了错误

使用swift的示例


你能把你的标题编辑得更清楚一点吗?这可能有助于得到更多的答案:-)@kalaracey,这个怎么样?太好了!谢谢。我应该在阅读文档时更加集中精力:(哈哈