我目前正在开发一个原生(Objective C)iOS应用程序(适用于iPhone和iPad),我计划将其放在App Store(iOS 6.1使用Mountain Lion 10.8.3上的Xcode 4.6.1)。
此应用程序需要在设备上本地存储一些数据,以使我的应用程序在离线时(无网络)仍可正常工作。我选择使用Core Data,因为它易于使用,你仍然可以用它做一些更复杂的东西。
我的问题...使用核心数据数据库将应用程序部署到App Store的最佳做法是什么?
1)使用空Core Data数据库部署我的应用程序并让它在首次启动时或用户点击某个刷新按钮时自动下载数据?
优点:
CONS:
2)使用预先填充的Core Data数据库部署我的应用程序,并让用户在偶尔更改数据时从App Store更新应用程序?
优点:
CONS:
对我来说,对开发人员来说,最简单的就是#2,因为我不需要部署服务器端应用程序......但是这可以做到吗?我可以轻松创建一个虚拟类来填充我的iPhone模拟器上的数据库,但是可以将此数据库与我的应用程序捆绑在一起并将其部署到App Store吗? #1是唯一的出路(或最好的方式)吗?我有没有想到的第三种选择?
我很想知道你对此的经历......并且不要害怕提出你能想到的任何建议。谢谢!
答案 0 :(得分:5)
这取决于你需要/想做什么。这两种方法都是有效的。我亲自实现了两者。
以下是我可以告诉你的事情:
信息会发生变化:除非您正在撰写有关数学的应用,否则很可能永远不会发生变化(除非最初出现错误)。它可以使您的应用程序不正确/过时非常快。发送应用更新需要一些时间。
互联网可能不可靠:您可以假设用户将拥有数据连接以下载该应用。但是,这并不意味着他们第一次打开应用程序时会有一个。有时他们会将其设置为下载并将其设置放在一边。他们可能稍后打开应用程序,可能没有数据连接。
你可以混合使用:我们开发了一个应用程序,这个应用程序可以作为一个自我导览游览一个细胞接收不良的地方。鼓励访问者使用信息中心WIFI下载应用程序,但一旦他们走出门,它的小区接收很差/不可用。我们必须在捆绑包中包含预先填充的SQL。如果首次打开应用程序时没有互联网,那么它将从捆绑包中自动加载,否则它将从简单的服务(几乎是转储)下载,其中信息可以轻松更新。
同样,这实际上取决于你想要做什么以及你的要求和约束是什么。从本质上讲,它们都是有效且可行的方法。我个人更喜欢有一种更新信息的方法,而不必发送应用程序更新,根据我的经验,它可能需要数周才能公开发布。
有些库可以为您完成大部分Web服务客户端实现(JSON和XML解析器)。包括它们相当容易。您所要做的就是通过网址显示该信息。
返回“我可以包含捆绑数据库”问题。是的你可以。这是您从捆绑包中导入SQLite文件的方法:
在您的app delegate {/ 1>} persistendStoreCoordinator
中执行此操作
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:directoryPath(@"YourSQLFile.sqlite")]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"YourSQLFile" ofType:@"sqlite"];
NSError *error = nil;
if(defaultStorePath) {
[fileManager copyItemAtPath:defaultStorePath toPath:[storeURL path] error:&error];
}
}