iphone - 在 iOS 上使用 CoreData 处理类似于多个文档的东西

标签 iphone ios sqlite core-data

我一直在尝试确定一种优雅的方式来处理在 iOS 上使用 CoreData 实现设计,这类似于处理多个文档。

作为背景,我有一个培训应用程序,我想在其中支持培训类(class)的应用程序内购买。这些可能是包含 .sqlite 和一些支持媒体文件的文件包,这些文件在下载时最终会出现在 App Library 文件夹的 CourseName 子文件夹中。

我希望能够支持在我的应用程序根级别的表格中列出所有类(class)名称,并根据用户选择的类(class)在它们之间切换。

我的直觉是我可以将 Store 切换到合适的 sqlite。

    NSString *sqliteFileForCourseName = [self sqliteFileForCourseName];
    storeURL = [[self applicationLibraryDirectory] URLByAppendingPathComponent:sqliteFileForCourseName];
    if(!__persistentStoreCoordinator)
        __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    // handle error

我认为这将是管理 [persistentStoreCoordinator persistentStores] 中的项目的问题。

我不确定这是否是处理该功能的正确级别(多个持久存储),或者它是否可以在 NSManagedObjectContext 级别完成。

我可以接受从 Library 文件夹加载类(class)时只读的类(class),如果它简化了拥有一个可写存储和多个只读存储的事情(也许 NSInMemoryStoreType?)

最佳答案

如果您所做的只是处理文档列表,那么 NSArrayNSUserDefaults 可能是您最好的选择。它在技术上没有那么令人印象深刻,但最简单的解决方案通常是最简单的。

至于每个文档,除非您真的有很多数据要读取,否则我不会费心使用 sqlite 数据库。我会选择一个包含 .json 文件的存档,该文件提供该文档的信息,即

索引.json

{
    "name":"Document 1",
    "author":"Bob Smith"
    "pages":[
        { "title":"Title", "path":"title.html" },
        { "title":"Contents", "path":"contents.html" },
        { "title":"1", "path":"contents/1.html" }
    ]
}

其中每个页面都是一个 html 文件(或您想要的任何格式),它的位置在文档的 json 描述中指定。

只需创建一个实现 NSCoding 的 Document 对象 - 从上面的 JSON 创建它并将其存储在您的 NSUserDefaults 中。

然后,在启动时,只需使用标题作为 UITableViewCell 中的文本,从 NSUserDefaults 中读取的数组填充 UITableView。


但是,使用 sqlite 可能有正当理由 - 您是否打算对文档进行任何特别复杂的处理?

关于iphone - 在 iOS 上使用 CoreData 处理类似于多个文档的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7470338/

相关文章:

iphone - 为什么 [response expectedContentLength] 总是返回 -1

iphone - phonegap 插件,用于从库中选择视频

ios - UIWebView 和 Swift : Detect when a video starts playing

ios - SwiftUI:如何调整大小以适应 Button 以扩展以填充 VStack 或 HStack 父 View ?

iphone - 滑动删除时更改单元格的背景颜色

iphone - Objective-C NSInteger 格式困惑

ios - 如何在不更改 UITabBar 标题的情况下更改 UINavigationBar 标题?

android - 插入数据库后显示主键

ios - FMDB 数据库无法在设备上运行,但可以在模拟器中运行

python - 在 Python 3 中使用 SQLite 的 FTS3/4