2012-08-15 83 views
0

我有类MyOperation : NSOperation@property (nonatomic, retain) NSString *oID;NSOperationQueue操作filteredArrayUsingPredicate错误

有时我需要取消操作具体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

你的问题是你正在格式化一个字符串,然后发送到Predicate构造函数方法。它已经是一个格式化器,并且知道如何格式化你给它的数据。

基本上,你需要的格式看起来像:

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

,但你得到

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

如果单独使用格式化,你应该让过去这个问题...

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

注:谓词格式化程序知道它应该专门处理字符串,并自动添加当你传递一个字符串时需要加引号字符%@'

+0

正确!这是一个错误,多么愚蠢=)Thx! – 2012-08-15 21:55:06

0

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

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

这就是说,某些操作可能已完成(从易变的队列中被移除)由谓词应用到它的时间。