2013-03-30 43 views
4

我目前正在开发一个本机(Objective C)iOS应用程序(适用于iPhone和iPad),我打算在App Store上使用Xcode 4.6.1(在Mountain Lion 10.8.3上的iOS 6.1)。使用Core Data将iOS应用程序部署到App Store的最佳实践?

此应用程序需要在设备上本地存储一些数据,以便使我的应用程序在脱机(无网络)时仍能正常工作。我选择使用Core Data,因为它很容易使用,您仍然可以使用它来做一些更复杂的事情。

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

1)用空的Core Data数据库部署我的应用程序,让它在第一次启动时或当用户点击某个刷新按钮时自动下载数据?

优点:

  • 用户可以在一段时间一次点击一些更新按钮,更新应用程序数据(无需更新整个应用程序,只需更新数据)。

缺点:

  • ,直到该数据库已被填充的应用将无法使用。
  • 一定要保持和主机服务器上的Web服务的地方,从应用程序调用响应(成本托管,必须开发一个全新的网络服务,故障的另一点)

2)部署应用与预先填充的核心数据数据库并让用户在App Store中更新应用程序时,我偶尔更改一次数据?

优点:

  • 的应用程序将被从App Store下载后马上工作。
  • 不需要有服务器端。

缺点:

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

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

我会好奇地听到你的这个经历......并且不要害怕投入你能想到的任何建议。谢谢!

+0

至于我读过有关核心数据应该有发货没问题的应用程序与现有的持久存储,它只是一个文件。我不知道模拟器在哪里存储文档。 – Andreas

+0

我想知道如何使用现有的预填充核心数据库来发布应用程序。 – Pascal

回答

5

这真的取决于你需要/想做什么。两种方法都是有效的和可能的。我亲自执行了两个。

这里是我可以告诉你:

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

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

  • 您可以混合使用:我们开发了一款应用程序,该应用程序意味着您可以自行导览一个信号不好的地方。我们鼓励访问者使用信息中心WIFI下载应用程序,但一旦他们走出了门,它的信号接收很差/不可用。我们必须在包中包含预填充的SQL。如果在应用程序第一次打开时没有互联网,那么它将自动从软件包中加载,否则它会从一个简单的服务(几乎是转储)下载它,以便轻松更新信息。

再一次,这取决于你想要做什么以及你的要求和约束是什么。实质上,它们都是有效和可行的方法。我个人更喜欢有一种方式来更新信息,而不必发送应用程序更新,根据我的经验,可能需要几周时间才能公开发布。

有一些库会为您完成大部分Web服务客户端实现(JSON和XML解析器)。包括他们是相当容易的。你所要做的就是通过一个url显示这些信息。

回到你的“我可以包括捆绑数据库”的问题。是的你可以。这就是您可以从包中导入一个SQLite文件:

在应用程序委托执行此操作在您的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]; 
     } 

    } 
+0

我的应用程序数据将会改变,可能不会那么频繁,但它肯定会改变。我想知道更多关于如何能够“在包中包含预填充的SQL”以及如何“从简单的服务下载(几乎是转储)”的信息。如果你能在这些方面多加一些,我将不胜感激。谢谢! – Pascal

+0

我根本不担心Web服务客户端的实现,但更多的是关于如何使用现有的预填充核心数据数据库来发布应用程序,以及如何实现服务器端服务(我只是一位开发人员,家,我必须找到一个地方来举办这个?) – Pascal

+0

+1:“你可以混合使用两者。” –

相关问题