NSOperationQueue操作filteredArrayUsingPredicate错误

时间:2012-08-15 20:12:24

标签: iphone ios nspredicate nsoperation nsoperationqueue

我的课程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过滤操作?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您的问题是您正在格式化字符串,然后将其发送到Predicate构造函数方法。它已经是格式化程序,并且知道如何格式化您提供的数据。

基本上,您需要格式如下:

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

但你得到了

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

如果您单独使用格式化程序,则应该解决此问题...

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

注意:谓词格式化程序知道它应该特别处理字符串,并在传递要由%@'格式化的字符串时自动添加额外的引号字符