2

述語を使用して配列をフィルタリングする際に問題があります。私のコードはこれです:

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=[dirContentsfilteredArrayUsingPredicate: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];

誰かが間違いを見ますか?

感謝と敬意

4

1 に答える 1

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"

于 2013-02-01T16:22:39.710 に答える