1

IN 演算子は SBElementArray のフィルタリングに使用できますか? 私はそれを使用しようとしていますが、常に NULL 配列を返します。

私のコード(hexArrayには通常、より多くの要素があります):

SBElementArray *musicTracks = [libraryPlaylist fileTracks];
hexArray = [NSArray arrayWithObject: @"3802BF81BD1DAB10"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY %K IN %@",@"persistentID",hexArray];

NSLog(@"%@", [[musicTracks filteredArrayUsingPredicate:predicate] valueForKey:@"persistentID"]);
NSLog(@"%@", hexArray);
NSLog(@"%@", predicate);

出力:

2013-05-26 12:59:29.907 test[1226:403] (null)
2013-05-26 12:59:29.907 test[1226:403] (3802BF81BD1DAB10)
2013-05-26 12:59:29.908 test[1226:403] ANY persistentID IN {"3802BF81BD1DAB10"}

述語を次のように設定しようとしました:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY %K == %@",@"persistentID",hexArray];

出力:

2013-05-26 13:03:04.629 test[1258:403] (3802BF81BD1DAB10)
2013-05-26 13:03:04.630 test[1258:403] (3802BF81BD1DAB10)
2013-05-26 13:03:04.630 test[1258:403] ANY persistentID == {"3802BF81BD1DAB10"}

そして、これはうまくいきます。しかし、IN機能が欲しいです。

4

5 に答える 5

0

Scripting Bridge は IN 演算子を技術的にサポートしており、適切な形式の Apple イベントを作成しますが、ほとんどのアプリケーションはそれを認識しません。最善の回避策は、NSAddict で提案されている連鎖 OR テストです。

于 2014-12-04T00:05:00.027 に答える
0

私があなたの意図を正しく理解していれば、述語は%K IN %@(なし) である必要があります (配列内の ID の 1 つを持つすべてのトラックを取得します)。ANY

何らかの理由で、これは では機能しませんが、述語を適用する前にSBElementArray単純に通常の に変換できます( も機能するはずであり、より効率的である可能性があります)。NSArrayNSSet

SBElementArray *musicTracks = [libraryPlaylist fileTracks];
NSArray *musicTracksArray = [NSArray arrayWithArray:musicTracks];

NSArray *hexArray = [NSArray arrayWithObjects: @"CE24B292556DB1BA", @"CE24B292556DB1F0", @"CE24B292556DB1C4", nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"persistentID", hexArray];
NSLog(@"%@", [[musicTracksArray filteredArrayUsingPredicate:predicate] valueForKey:@"persistentID"]);
于 2013-05-26T14:02:08.900 に答える
0

のすべての要素をループして、hexArray各パスで等値述語を使用することになりました。おそらく最も効率的ではありませんが、機能します。

for (NSString *hexID in hexArray){
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"persistentID == %@",hexID];
        iTunesTrack *track = [[musicTracks filteredArrayUsingPredicate:predicate] objectAtIndex:0];
        [track duplicateTo:playlist];
    }
于 2013-05-26T13:51:59.970 に答える
0

使ってみてCONTAINS[c]

元:-

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY %@ CONTAINS[c] %k",hexArray, @"persistentID"];
于 2013-05-26T13:05:53.590 に答える