[英]Recursive fetch in CoreData
我有一個簡化的數據結構:
所以一個文件夾可以包含多個文件夾或片段,每個片段都是一個文件夾的一部分。 我想獲取給定文件夾中或特定文件夾的子文件夾中的所有片段。
第一種情況對我有用,但我無法正確處理第二種情況。
為了使這一點更清楚,這里有一個例子:
當我選擇文件夾 C 時,我想要獲取代碼片段 3,但是當我選擇文件夾 B 或文件夾 A 時,我想要獲取代碼片段 1、代碼片段 2 和代碼片段 3。
這就是我目前擁有的:
class Store {
...
func snippetsFetchRequest() -> NSFetchRequest<Snippet> {
let fetch: NSFetchRequest<Snippet> = Snippet.fetchRequest()
fetch.returnsObjectsAsFaults = false
fetch.relationshipKeyPathsForPrefetching = ["folder", "tags"]
fetch.sortDescriptors = [NSSortDescriptor(key: "updateDate", ascending: false)]
return fetch
}
...
}
let context = PersistenceManager.shared.mainContext
let store = SnippetStore(context: context)
fetchedResultsController = NSFetchedResultsController(fetchRequest: store.snippetsFetchRequest(),
managedObjectContext: context,
sectionNameKeyPath: nil,
cacheName: nil)
fetchedResultsController.fetchRequest.predicate = NSPredicate(format: "folder == %@", selectedFolder)
do {
try fetchedResultsController.performFetch()
} catch {
...
}
但這只會獲取給定/選定文件夾的直接子級的片段。
有什么方法可以通過仍然使用NSFetchedResultsController
來解決我的問題嗎?
你的數據結構是錯誤的。 人們傾向於將數據結構視為給定信息的“正確”形式; 您想要盡可能接近現實“建模”。 這是錯誤的。 您的模型只有在為您的特定應用程序提供價值的情況下才有價值。
在這種情況下,如果您想獲取一個文件夾的所有后代,最好建立一個關系來表示它。 您可以在添加對象時設置后代和祖先的多對多關系。 如果您需要更多屬性來過濾或排序,您應該添加它們,即使這些屬性在理論上可以從當前的樹模型中派生出來。 只要確保它們全部保持同步即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.