我的课程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过滤操作?
答案 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];
注意:谓词格式化程序知道它应该特别处理字符串,并在传递要由%@
'格式化的字符串时自动添加额外的引号字符