0

私はクラスMyOperation : NSOperationを持っています@property (nonatomic, retain) NSString *oID;

また、特定の操作をキャンセルする必要がある場合もありoIDます。私はこれをやろうとしています:

NSArray *operations = operationQueue.operations;
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat: @"oID == %@", _specificID]];
NSArray *arrayOperations = [operations filteredArrayUsingPredicate: predicate];

エラーが発生します:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "oID == 0f5db97b-f127-4425-ad79-451d1f204016"'

NSOperationQueue から操作をフィルタリングすることは可能ですか?

4

2 に答える 2

0

問題は、文字列をフォーマットしてから、それをPredicateコンストラクターメソッドに送信することです。それはすでにフォーマッターであり、あなたがそれを与えるデータをフォーマットする方法を知っています。

基本的に、次のような形式が必要です。

oID == "0f5db97b-f127-4425-ad79-451d1f204016"

しかし、あなたは得ています

oID == 0f5db97b-f127-4425-ad79-451d1f204016

フォーマッタを単独で使用する場合は、この問題を回避する必要があります...

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

注:述語フォーマッタは、文字列を特別に処理する必要があることを認識しており、%@'でフォーマットする文字列を渡すと、余分な引用文字が自動的に追加されます。

于 2012-08-15T21:41:34.453 に答える
0

operations.queue は変更可能な配列であると推測します (そのクラスをログに記録すると、この '__NSArrayM' が返されます)。あなたが試すべきことは次のとおりです。

NSArray *operations = [NSArray arrayWithArray:operationQueue.operations];

つまり、述語が適用されるまでに一部の操作が完了している (そして変更可能なキューから削除されている) 場合があります。

于 2012-08-15T20:31:33.670 に答える