我有一個NSOutlineView顯示來自我的核心數據存儲的數據。數據是通過一個連接到我的managedObjectContext並使用NSTreeController顯示在NSOutlineView中的NSarrayController呈現的(非常類似於here)。我想過濾使用NSPredicate(或其他)顯示的數據,但是我無法使其工作。請注意,這是OSX而不是iOS,所以我不能使用NSFetchedResultsController。如何使用arrayController和核心數據的謂詞
我能夠檢索正確的數據並將它們存儲在NSArray中。但是,僅使用過濾的數據啓用我在outlineview中看到的自動更新不起作用。這是我目前有:
[arrayController setManagedObjectContext:_coreDataHelper.context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SDRDFileObject"
inManagedObjectContext:_coreDataHelper.context];
[request setEntity:entity];
NSNumber *directionLimit = @1;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"direction = %@", directionLimit];
[request setPredicate:predicate];
NSError *error;
[arrayController setContent:[_coreDataHelper.context executeFetchRequest:request error:&error]];
[_coreDataHelper.context reset];
[arrayController fetch:self];
[outlineView reloadData];
正如你可以看到我的問題是接近這個one,但我還在掙扎。如果我確實需要使用setContent來爲arrayController工作,那麼我還會假設我會遇到Core Data上下文與arrayController內容不匹配的問題。建議或如何正確執行此操作的示例非常感謝。
謝謝!你是絕對正確的,我不需要'NSArrayController',我現在只剩下使用可以正常工作的treecontroller。正如你所建議的那樣,我實現了一個遞歸函數,以我想要的方式過濾'NSTtreeController',並且它可以工作。但是,它非常緩慢,因爲它不是並行地遍歷每個節點和父節點。如果你有如何實現你的filterContentUsingPredicate的示例代碼,將不勝感激。我會接受你的回答。 – 2014-11-10 00:07:57
這聽起來像我的過濾程序不比你的更復雜。我還沒有完全學習如何使用線程,並且我也訪問了樹中的每個節點。到目前爲止,我發現它足夠快,適合我的目的,所以我沒有覺得有必要提出更復雜的解決方案。 – 2014-11-10 09:55:40