У меня проблемы с фильтрацией массива с помощью предиката. Мой код такой:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSError *error;
NSFileManager *fm = [NSFileManager defaultManager];
NSString *filename=[NSString stringWithFormat:@"%@/%lld-%@.jpg",[paths objectAtIndex:0],[TRIP surrogateKey], ms];

NSArray *dirContents = [fm contentsOfDirectoryAtPath:[paths objectAtIndex:0] error:&error];
NSPredicate *fltr = [NSPredicate predicateWithFormat:@"SELF beginsWith %lld-%@",[TRIP surrogateKey], ms];
NSArray *registros=[dirContents filteredArrayUsingPredicate:fltr];

В сеансе отладки я обнаружил, что у меня проблема с выполнением последней строки кода (NSArray * registros = [dirContents filterArrayUsingPredicate: fltr]), и это дает мне следующую ошибку:

-[__NSCFString objCType]: unrecognized selector sent to instance 0x7e67200 2013-02-01 16:37:59.132 GastosApp[4462:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objCType]: unrecognized selector sent to instance 0x7e67200'

В разделе отладки я увидел, что память 0x7e67200 занята объявленной переменной ms:

NSMutableString *ms = [[NSMutableString new] autorelease];

Кто-нибудь видит ошибку?

Спасибо и привет

2
user1823693 1 Фев 2013 в 19:58

1 ответ

Лучший ответ

Это может быть ошибка, потому что NSPredicate автоматически цитирует переменные формата, такие как% @.

Например, это:

[NSPredicate
    predicateWithFormat:@"SELF like[c] %@*%@", prefix, suffix];

Будет как: SELF LIKE[c] "prefix" * "suffix"

Правильно:

[NSPredicate
    predicateWithFormat:@"SELF like[c] %@",
    [[prefix stringByAppendingString:@"*"] stringByAppendingString:suffix]];

Что дает нам правильный результат: SELF LIKE[c] "prefix*suffix"

1
Mikhail 1 Фев 2013 в 20:22