4

我目前正在开发一个本机(Objective C)iOS 应用程序(适用于 iPhone 和 iPad),我计划将它放到 App Store(在 Mountain Lion 10.8.3 上使用 Xcode 4.6.1 的 iOS 6.1)。

此应用程序需要在设备本地存储一些数据,以使我的应用程序在离线(无网络)时仍然可以工作。我选择使用 Core Data 是因为它易于使用,而且你仍然可以用它做一些更复杂的事情。

我的问题......关于使用 Core Data 数据库将应用程序部署到 App Store 的最佳实践是什么?

1) 使用空的 Core Data 数据库部署我的应用程序,并让它在首次启动或用户单击某些刷新按钮时自动下载数据?

优点:

  • 用户可以偶尔单击一些刷新按钮来更新应用程序数据(无需更新整个应用程序,只需更新数据)。

缺点:

  • 在填充数据库之前,该应用程序将无法使用。
  • 必须在某处的服务器上维护和托管 Web 服务以响应来自应用程序的调用(托管成本,必须开发全新的 Web 服务,另一个故障点)

2) 使用预填充的 Core Data 数据库部署我的应用程序,并在我偶尔更改数据时让用户从 App Store 更新应用程序?

优点:

  • 从 App Store 下载后,该应用程序将立即运行。
  • 不需要有服务器端。

缺点:

  • 如果我想刷新数据,用户必须从 App Store 更新整个应用程序。

对我来说,开发人员最简单的方法是#2,因为我不必部署服务器端应用程序......但这甚至可以做到吗?我可以轻松地创建一个虚拟类来填充我的 iPhone 模拟器上的数据库,但是是否可以将此数据库与我的应用程序捆绑在一起并将其部署到 App Store?#1是唯一的方法(或最好的方法)吗?有没有我没有想到的第三种选择?

我很想知道你在这方面的经历......并且不要害怕提出你能想到的任何建议。谢谢!

4

1 回答 1

5

这真的取决于你需要/想要做什么。这两种方法都是有效且可行的。我亲自实施了两者。

以下是我可以告诉你的:

  • 信息会改变:除非你正在编写一个关于数学的应用程序,否则事情很可能永远不会改变(除非最初有错误)。它可以使您的应用程序很快变得不正确/过时。发送应用更新需要一些时间。

  • 互联网可能不可靠:您可以假设用户将有数据连接来下载应用程序。但是,这并不意味着他们第一次打开应用程序时就会拥有一个。有时他们会将其设置为下载并将其设备放在一边。他们可能稍后会打开应用程序,并且可能不存在数据连接。

  • You can do a mix of both: We developed an app that was meant as a self-guided tour of a place where there is poor cell reception. Visitors were encouraged to use the Information Center WIFI to download the app, but once they stepped out of the door it cell reception was poor/unavailable. We had to include a pre-populated SQL in the bundle. If there is no internet when the app is first opened, then it will load automatically from the bundle, otherwise it downloads it from a simple service (pretty much a dump) where information can be easily updated.

Again, it really depends on what you are trying to do and what your requirements and contraints are. In essence they are both valid and doable approaches. I personally prefer having a way to updating information without having to send an app update that, in my experience, can take weeks before it becomes publicly available.

There are libraries out there that will do most of the web service client implementation for you (JSON and XML parsers). Including them is fairly easy. All you have to do is to display that information through a url.

Back to your "can I include bundle a database" question. Yes, you can. This is how you can import a SQLite file from your bundle:

Do this in your persistendStoreCoordinator in your app delegate

    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];
        }

    }
于 2013-03-30T21:41:52.083 回答