我一直在尝试确定一种优雅的方式来处理在 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
?)
最佳答案
如果您所做的只是处理文档列表,那么 NSArray
和 NSUserDefaults
可能是您最好的选择。它在技术上没有那么令人印象深刻,但最简单的解决方案通常是最简单的。
至于每个文档,除非您真的有很多数据要读取,否则我不会费心使用 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/