0

我正在使用最新的 SDK 和 XCode 4.5.2 开发一个 iPhone 应用程序。

这个问题可能对任何移动平台都有效。

当应用加注星标并下载一些信息时,我需要连接到网络服务。服务器上的这些信息可能会发生变化:一些寄存器可能会被删除、更新或插入。

我的问题是我不知道在哪里存储这些信息。我认为将其存储在设备内存中是个坏主意。我认为最好存储在文本文件或数据库中。你怎么看?

我还有一个问题是:如何知道服务器上的某些数据是否已更改?我认为每次用户给应用加注星标时下载相同的数据是个坏主意。

如果我想这样做,请在启动时连接到网络服务,当显示启动画面时。我必须将代码放在 AppDelegate 上的什么地方?

欢迎任何建议。

4

3 回答 3

3

我必须将代码放在 AppDelegate 上的什么地方?

将代码放在 AppDelegate 中并不是一个好主意。相反,您可以将 viewController 作为启动画面。将此 viewController 设置为您的 rootViewController。在此处执行您的初始 Web 服务调用,完成后移至应用程序的第一个屏幕。

我如何知道服务器上的某些数据是否已更改?

您必须将您的数据版本传达给服务器。所以在服务器端给数据设置一个版本号,在下载数据的时候保持跟踪。因此,如果您在调用 Web 服务时将版本号传递给服务器,则服务器可以决定是否有任何新数据可用。这样您就可以避免下载已经下载的数据。

在哪里存储这些信息?

这取决于您要存储的数据大小。以及它的安全性。我认为使用像 Sqlite3 这样的数据库是一个不错的选择。

希望这可以帮助。

于 2013-01-21T10:35:31.557 回答
1

我必须将代码放在 AppDelegate 上的什么地方?

这取决于您决定下载数据的应用程序的行为。通常,如果您的应用程序应该在每次进入新视图时显示最新数据,则应在访问该视图时下载数据。这样,您将始终向用户显示最新的可用数据。

您通常会避免在application: didFinishLaunchingWithOptions:中投入太多,尤其是网络连接,因为您不知道用户可能拥有什么样的连接。如果连接需要很长时间并且应用程序:didFinishLaunchingWithOptions:需要太长时间才能返回 iOS 会因为打开时间过长而终止您的应用程序,这根本不利于用户体验。

我如何知道服务器上的某些数据是否已更改?

您将希望在来自服务器的响应的标头中传递最后修改的时间戳或 etag。当您从服务器获得标头响应时,您可以检查您收到的上一个上次修改的数据,或者如果 etag 不同,您就知道数据已更改。这样做比下载所有正文以检查单个参数要快得多,如果该参数没有更改,那么您只是下载了一堆数据。我不鼓励版本控制,版本控制更多地用于 API 更改,而不是检查数据是否过时。

存储位置?

这取决于您要下载的数据量,但我建议通常使用核心数据。将数据存储到文件然后保存该文件的问题在于,每次打开应用程序时,您都必须将该数据分解为可用的东西,然后才能搜索它等。使用核心数据,您将拥有完全形成的对象您可以使用 NSPredicate 进行搜索,从长远来看,这会使一切变得更容易使用。

如果您只是下载一些设置,那么您可以使用文件或 NSUserDefaults 之类的东西,但如果您要向用户显示数据列表或数据集合,最好使用核心数据。

于 2013-01-21T12:09:37.730 回答
0

我如何知道服务器上的某些数据是否已更改?
在您的应用程序和服务器中也使用可变版本。使用 API 发送应用程序变量版本,并在下载数据之前检查两个版本。

我必须将代码放在 AppDelegate 上的什么地方?

要么可以使用 applicationDidBecomeActive 要么 didFinishLaunchingWithOptions 取决于您的要求
- (void)applicationDidBecomeActive:(UIApplication *)application

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


根据数据的大小和您的要求将这些信息存储在哪里,您可以决定将数据保存在哪里

  1. 您可以将数据保存在UserDefault
  2. 您可以将数据保存为NSTemporaryDirectory / NSDocumentDirectory / NSLibraryDirectory中的文件。我认为NSDocumentDirectory适合你。
  3. 您可以将数据保存在sqliteCoreData
于 2013-01-21T11:04:57.770 回答