5

あきらめる。文字列に別の文字列が含まれているかどうかを確認するために、想像できるすべての組み合わせを試しました。これが私がやりたいことを説明する直感的な構文の例です:

    NSPredicate* pPredicate = [NSPredicate predicateWithFormat:@"NOT (%K CONTAINS[c] %@)",
NSMetadataItemFSNameKey, 
[NSString stringWithFormat:@"Some String"]];

NOTをどのようにシフトするかに関係なく、!を使用します。代わりに、演算子をシフトするか、括弧を完全に削除すると、この式を解析するときに常に例外が発生します。

この表現の何が問題になっていますか?

編集:私が呼び出すと例外が発生します

[pMetadataQuery setPredicate:pPredicate];

例外は次のとおりです。 *キャッチされなかった例外によるアプリの終了'NSInvalidArgumentException'、理由:'NSMetadataQueryに指定された不明なタイプのNSComparisonPredicate(kMDItemFSName CONTAINS [c] "Some String")'

4

2 に答える 2

11

私は完全に成功しました:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"NOT (%K CONTAINS[c] %@)",
        @"someKey",
        [NSString stringWithFormat:@"Some String"]];
NSArray *testArray =
    [NSArray arrayWithObjects:
        [NSDictionary dictionaryWithObject:@"This sure is Some String" forKey:@"someKey"],
        [NSDictionary dictionaryWithObject:@"I've nothing to say" forKey:@"someKey"],
        [NSDictionary dictionaryWithObject:@"I don't even have that key" forKey:@"someOtherKey"],
        nil];

NSArray *filteredArray = [testArray filteredArrayUsingPredicate:predicate];
NSLog(@"found %@", filteredArray);

3 つのオブジェクトのうち 2 番目の 2 つのオブジェクトは、testArrayOS filteredArrayX v10.7 および iOS v4.3 で最終的にリリースされました。したがって、問題は述語ではありません — これを技術的に質問に対する完全な回答にします — それはNSMetadataQuery. 悲しいことに、私はその分野での経験がありませんが、それは確かに次に研究することです.

于 2012-07-13T19:06:05.497 に答える