我有一個陣列文件路徑的,我有我的UI中的NSPredicateEditor設置,用戶可以結合了NSPredicate找到一個文件。他應該可以通過篩選名稱,類型,大小和日期。如何使用NSPredicate與NSPredicateEditor不同的數據(多個謂詞?)
有幾個問題我現在有:
- 我可以只能從編輯得到一個謂語對象。當我使用 「predicateForRow:」它返回(空)
- 如果用戶想通過過濾名稱和大小或日期的文件,我 不能只用這個謂詞我陣列上了,因爲那些 信息未包含在它
我可以拆分了謂詞成不同的謂詞沒有 將其轉換成的NSString對象,然後搜索每一個@「OR」 | @「AND」並將組件分成一個數組,然後將每個NSString轉換爲一個新的謂詞?
在NSPredicateEditor設置我已經爲「左表達式」一些選項: Keypaths,恆值,字符串,整數,浮點數數字和日期。我想用「名稱」,「類型」,「日期」,「尺寸」向用戶顯示下拉菜單。但隨後產生的謂詞自動看起來是這樣的:
"name" MATCHES[c] "nameTest" OR "type" MATCHES[c] "jpg" OR size == 100
因爲數組充滿字符串,爲「名」,「類型」等搜索和這些字符串不以@「MyString的」迴應* .name * m過濾器總是返回0個對象。有沒有一種方法可以在菜單中顯示名稱,類型,大小和日期,但是如果不用手工去寫「自己」到謂詞中?
我已經在官方的Apple教程,Stackoverflow,谷歌,甚至Youtube上找到了一條線索。這個問題現在困擾了我近一個星期。謝謝你的時間!如果您需要更多信息,請讓我知道!
嗨,戴夫!非常感謝您長時間的回答以及您提供的有用提示!我已經通過複合嵌套謂詞,問題如下: 我的dataController擁有一個自定義對象數組。每個對象都包含一個從哪裏獲取所有子路徑以在其中搜索文件的路徑。 所以我有一個subPaths數組,我想要搜索用戶通過Pred.Edit選擇的一個或多個不同的規範。但是這個arrayOfSubpaths不包含任何其他信息。要獲得訪問權限,我必須更改左邊的表達式。用手去「自我」,我該怎麼辦? – 2012-07-08 00:57:47
爲了讓它更清晰一點: 如果我的謂詞只是過濾名稱,它幾乎沒有問題。我必須將「name」更改爲「self」,然後從subPaths數組中標識出正確的路徑。 但是,如果用戶想要按多個值排序,它們不包含在subPaths數組中,我將不得不使用新數據創建一個不同的數組並再次過濾。但是,謂詞不會找到任何東西,因爲名稱不包含在數組中。我儘量避免創建一個具有4個屬性的customobject「以防萬一」。你現在明白我的問題好一點了嗎? – 2012-07-08 01:48:08
@Tom謂詞在對同構對象進行評估時(即它們都是同一時間)效果最好。我認爲如果你避免創建一個簡單的模型對象只是因爲它只有4個屬性,那可能是不明智的。 – 2012-07-08 04:01:44