NSPredicate,带引号/不带引号
Posted
技术标签:
【中文标题】NSPredicate,带引号/不带引号【英文标题】:NSPredicate, with quotes / without quotes 【发布时间】:2011-07-06 14:24:31 【问题描述】:在我的 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];
这无法返回任何内容。我假设这是因为它周围有引号或其他东西,尽管我可能不正确。
我在这里做错了什么?
【问题讨论】:
【参考方案1】:实际上,格式化谓词以排除引号的正确方法是使用%K
与%@
。见Predicate Format String Syntax。
【讨论】:
谢谢!你刚刚把我从 CloudKit NSPredicate 地狱中救了出来……【参考方案2】:您的countryCode
变量在读回时必须在其中包含引号。第一次分配文字@"CN"
时,引号将被删除,因为它们指定您的变量是NSString
。它们实际上并不在文字字符串中。如果您想在第一个 CN 中使用字符串,则需要明确指定引号,例如@"""CN"""
但是,如果你想去掉第二个字符串中的任何引号,你总是可以在将它放入谓词之前对字符串执行此操作:
[countryCode stringByReplacingOccurrencesOfString:@"""" withString:@""];
【讨论】:
嗯,不是我想要在第一个 CN 中引用引号,而是我不想在第二个 CN 中添加引号。我认为。因为它搞砸了 NSPredicate 调用。对吗? 当您对countryCode
进行NSLog 时,它是否包含引号?
是的,它无法从 Core Data 返回任何内容
我使用了:[countrycode stringByReplacingOccurrencesOfString:@"\"" withString:@""]; 而是这样做了。谢谢!
@thekevinscott 很高兴听到! ;)以上是关于NSPredicate,带引号/不带引号的主要内容,如果未能解决你的问题,请参考以下文章