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

我猜操作.queue 是一个可变数组(记录它的类返回这个'__NSArrayM')。你应该尝试的是:

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

也就是说,在应用谓词时,某些操作可能已经完成(并已从可变队列中删除)。

于 2012-08-15T20:31:33.670 回答
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 回答