2012-08-15 81 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]; 

這就是說,某些操作可能已完成(從易變的隊列中被移除)由謂詞應用到它的時間。