NSP предикат, с кавычками / без кавычек - PullRequest
3 голосов
/ 06 июля 2011

В моем приложении для 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"];

Это нормально работает и возвращает данные из Китая.

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

Это ничего не возвращает. Я предполагаю, что это потому, что вокруг него есть кавычки или что-то еще, хотя, возможно, я ошибаюсь.

Что я здесь не так делаю?

Ответы [ 2 ]

17 голосов
/ 17 августа 2013

На самом деле правильным способом форматирования предиката для исключения кавычек является использование %K против %@.См. Синтаксис строки формата предиката .

0 голосов
/ 06 июля 2011

Ваша переменная countryCode должна иметь кавычки внутри, когда она читается обратно.При первом назначении литерала @"CN" кавычки удаляются, поскольку они указывают, что ваша переменная NSString.Они на самом деле не внутри буквальной строки.Если вам нужны строки внутри первого CN, вам нужно явно указать кавычки, например, @"""CN"""

Однако, если вы хотите избавиться от любых цитат во второй строке, вы всегда можетесделайте это со строкой до помещения ее в предикат:

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