2009-07-01 42 views
2

我有一個NSFetchedResultsController這是取自NSManagedObjectContext對象。過濾NSFetchedResultsController爲零值?

這些對象具有lastOpened屬性,該屬性最初爲nil,僅在查看它們時才設置。

我希望我的UITableView顯示最近打開的對象的列表,我可以通過將NSSortDescriptor添加到NSFetchRequest來做到這一點。

問:

我不想顯示已沒有被研究的對象。 (lastOpened == nil)我可以通過相同的NSFetchRequest對此進行分類嗎?有沒有更好的方法來過濾數據?

謝謝。

回答

8

絕對如此。你在找什麼是NSPredicate。基本上,它允許您指定一個或多個您希望獲取的對象滿足的條件,然後僅獲取符合這些條件的對象。

建築謂詞是一個有點棘手的命題,但是 - 你可能想看看Predicate Format String Syntax指南開始。 對於您的特定情況,它更加棘手,因爲我不確定是否存在謂詞條件中的零值表示。你可以解決這個問題,但是,在遙遠的過去使用某些日期:


             
  
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened > %@", [NSDate dateWithTimeIntervalSince1970:0]]; 
  

您只需覈對無直接斷言:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened != nil"];

這將創建一個謂詞,只允許具有設定日期的對象(1970年1月1日之後的任何內容)將被返回。然後你會謂詞添加到讀取請求你執行它之前:

// Assuming you have some almost-ready NSFetchRequest *request: 
[request setPredicate:predicate];
+0

這太棒了。我有一個預感涉及的預感。謝謝! – 2009-07-01 21:53:26

5

試試這個:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"lastOpened != nil"]; 
... // add sort descriptors etc. 

然後添加讀取請求的NSFetchResultsController

0

對於斯威夫特,你可以用一個布爾值初始化NSPredicate總是返回true,實際上是一個不過濾任何

過濾器
return fetchedResultsController("Terminal", withFilter: NSPredicate(value: true), sortColumns: sortColumns, sortDirections: sortDirections) 
相關問題