NSPredicate,带引号/无引号

时间:2011-07-06 14:24:32

标签: iphone ios core-data nspredicate

在我的iPhone应用程序中,我正在阅读csv文件。相关的是这个:

NSString *countrycode = [[[NSString alloc] initWithFormat:@"%@", [arr objectAtIndex:2]] 
                                 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

返回“CN”(代表中国)。

当我这样做时:

NSLog(@"Manual: %@, country code: %@",@"CN",countryCode);

我明白了:

Manual: CN, country code: "CN"

一个有引号,另一个没有。我不知道为什么会这样。

这让我沮丧的原因如下:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"countrycode == %@ ", @"CN"];

这很好用,从Core Data返回中国。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"countrycode == %@ ", countrycode];

这无法返回任何内容。我假设这是因为它引用了它或其他东西,虽然我可能不正确。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:16)

实际上,格式化谓词以排除引号的正确方法是使用%K%@。请参阅Predicate Format String Syntax

答案 1 :(得分:-1)

当您的countryCode变量在回读时必须包含引号。第一次分配文字@"CN"时,会删除引号,因为它们指定您的变量为NSString。它们实际上不在文字字符串中。如果您想在第一个CN中使用字符串,则需要明确指定引号,例如@"""CN"""

但是,如果你想删除第二个字符串中的任何引号,你可以在将它放入谓词之前对字符串执行此操作:

[countryCode stringByReplacingOccurrencesOfString:@"""" withString:@""];