簡體   English   中英

NSPredicateEditor,忽略沒有搜索項的行?

[英]NSPredicateEditor, ignore rows with no search terms?

我馬上就說我是一個沒有經驗的Cocoa程序員,如果在文檔中以某種方式回答了我的問題,而我只是想念它,或者我對NSPredicateEditor的工作方式不了解,我深表歉意。 但是,我確實嘗試在文檔中搜索並用谷歌搜索,效果不大。 因此,我將這個問題帶給您。

我正在嘗試使用NSPredicateEditor篩選基於Core Data的表視圖。 通過創建NSCompoundPredicate,就可以基於各種條件對行進行過濾,過濾效果很好。 但是,當謂詞編輯器中的行的搜索字段中沒有文本時,返回的NSPredicate類似於

dataName CONTAINS[cd] ""

...與任何核心數據記錄都不匹配-不是我想要的。 如果該行中的搜索字段為空,則基本上我根本不希望它過濾我的數據集。

那么我的問題是,忽略謂詞這些部分的最簡單/最佳解決方案是什么? 我最初的想法是使用(NSPredicate *)predicateForRow:(NSInteger)row解析NSPredicateEditor值,然后自己重​​建謂詞,而忽略了試圖匹配"" ,但這似乎不必要地麻煩。 將最終的NSCompoundPredicate與- (NSArray *)subpredicates謂詞分開並以這種方式進行編輯似乎也好像是我弄錯了辦法。 有沒有更優雅的方法可以做到這一點?

*為了清楚起見,我正在考慮編輯謂詞的副本,然后將其傳遞給表視圖的控制器,而不是實際編輯當前存儲在NSPredicateEditor中的初始謂詞。

看來您應該能夠繼承NSPredicateEditor的子類並覆蓋predicateForRow:在NSPredicateEditor的超類NSRuleEditor中聲明),然后在此處進行替換。 您基本上只會調用super的實現,然后檢查謂詞並在必要時返回一個新創建的謂詞。

我認為Brian的想法正確,但是Snow Leopard下的NSPredicateEditor不會調用-predicateForRow:來生成其謂詞。 您需要覆蓋更高級別的-predicate方法,但是檢查謂詞結構並修剪與nil或空字符串constantValue所有比較仍然非常簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM