【问题标题】:core data with tree structure - return only 1 level具有树结构的核心数据 - 仅返回 1 级
【发布时间】:2011-12-05 02:07:53
【问题描述】:

我正在使用 Core Data,并且我有一个文件夹树状结构。所以我创建了 NSManagedObject 的 2 个子类,如下所示:

文件夹MO
属性:
- 文件夹名称
关系:
- FolderMO 本身(因为它可以有子文件夹)
- FileMO(它可以有属于文件夹的文件列表)

文件MO
属性:
- 文件名

我需要存储的数据本质上是 3 级文件夹,然后是 1 级文件。在第一级,我有 ~20 个文件夹,每个文件夹有 ~20 个子文件夹,每个子文件夹都有许多子子文件夹,最后我有属于所述文件夹的文件。我总共需要存储大约 10,000 个文件。

我的问题
有没有办法一次只能检索 1 级数据?即:核心数据是否让我只检索第一级文件夹以显示给用户。然后,如果他们做出选择,我会根据他们的选择检索下一个级别吗?我不想一次将所有数据加载到内存中,尤其是因为用户甚至可能不会使用应用程序的这一部分。

谢谢!

晴天

【问题讨论】:

    标签: objective-c database core-data


    【解决方案1】:

    在您访问它们之前,核心数据不会加载所有对象

    【讨论】:

    • 当我加载我的第一级 FolderMO 对象时,每个对象都有一个指向子文件夹或文件的 NSSet 属性(这是由我设置的关系自动创建的)。那么当我检索 FolderMO 对象时,NSSet 不会被初始化吗?在这种情况下,一旦我抓住我的第一级,所有子文件夹都会被初始化......
    • 您应该阅读有关核心数据内存管理的信息。基本上,即使您 NSLog(@"%@", folder),也不会获取您的“子文件夹”。
    • 那么我是否只需要向我的 FolderMO 添加一个名为“isTopLevel”的 BOOL 属性,为我的所有第一级文件夹将其设置为 true,并且当我从指定的上下文中获取数据时仅使用 isTopLevel == true 获取 FolderMO?这样只有我的第一级文件夹会被加载到内存中?谢谢!
    • 我在文档中找到了描述 Core Data 如何在需要时才加载您的关系的位置:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多