2012-07-07 64 views
2

我有一個陣列文件路徑的,我有我的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上找到了一條線索。這個問題現在困擾了我近一個星期。謝謝你的時間!如果您需要更多信息,請讓我知道!

回答

3

你來對地方了! :)

我只能從編輯器中獲得一個謂詞對象。

正確。這是一個NSPredicateEditor,而不是NSPredicatesEditor。 ;)

當我使用 「predicateForRow:」 它返回(null)

我不知道我會用這種方法。我的一般經驗是很大程度上忽略NSPredicateEditorNSRuleEditor的一個子類,主要是因爲它是一個高度專業化的子類,許多超類方法在謂詞編輯器中沒有太多意義(比如所有關於條件的東西,行選擇等)。有可能他們有某種相關性,但如果他們是,我還沒有想出如何呢。

,從編輯器獲得謂語,你這樣做:

NSPredicate *predicate = [myPredicateEditor objectValue]; 

如果用戶想通過名稱和大小日期

你的意思是(name = [something]) AND (size = [something] OR date = [something])到文件過濾器?

如果是這樣,NSPredicateEditor可以做到這一點,如果你已經設置嵌套模式爲「複合」。

我不能只用這個謂詞我陣列上了,因爲這些信息是不是在它

包含你需要什麼樣的信息?

我可以將謂詞拆分爲不同的謂詞,而不必將其轉換爲NSString對象,然後搜索每個「或」|「 @「AND」並將組件分成一個數組,然後將每個NSString轉換爲一個新的謂詞?

是的,但這是一個不好意思的想法。這很糟糕,因爲NSPredicate已包含您需要的所有信息,並將其轉換爲其他格式並執行字符串操作不是必需的,可能會導致併發症(例如,如果某人可以鍵入「name」值,如果他們輸入「OR」,會發生什麼?)。

我很難找出你想要做什麼。這聽起來像你有一個NSString對象的數組,你想根據用戶創建的謂詞進行過濾?如果是這樣,那麼這些namedatesize關鍵路徑是什麼意思?你想做什麼?

+0

嗨,戴夫!非常感謝您長時間的回答以及您提供的有用提示!我已經通過複合嵌套謂詞,問題如下: 我的dataController擁有一個自定義對象數組。每個對象都包含一個從哪裏獲取所有子路徑以在其中搜索文件的路徑。 所以我有一個subPaths數組,我想要搜索用戶通過Pred.Edit選擇的一個或多個不同的規範。但是這個arrayOfSubpaths不包含任何其他信息。要獲得訪問權限,我必須更改左邊的表達式。用手去「自我」,我該怎麼辦? – 2012-07-08 00:57:47

+0

爲了讓它更清晰一點: 如果我的謂詞只是過濾名稱,它幾乎沒有問題。我必須將「name」更改爲「self」,然後從subPaths數組中標識出正確的路徑。 但是,如果用戶想要按多個值排序,它們不包含在subPaths數組中,我將不得不使用新數據創建一個不同的數組並再次過濾。但是,謂詞不會找到任何東西,因爲名稱不包含在數組中。我儘量避免創建一個具有4個屬性的customobject「以防萬一」。你現在明白我的問題好一點了嗎? – 2012-07-08 01:48:08

+1

@Tom謂詞在對同構對象進行評估時(即它們都是同一時間)效果最好。我認爲如果你避免創建一個簡單的模型對象只是因爲它只有4個屬性,那可能是不明智的。 – 2012-07-08 04:01:44