存储数据iPhone应用程序的最佳实践

时间:2009-05-19 13:37:14

标签: iphone cocoa-touch

我的iPhone App很大程度上依赖于TableViews和SQLite数据库。你在哪里存储数据?在我的情况下,我从App Delegate中的Web中提取数据并将其存储在AppDelegate中,并定期将其保存到DB。

rootviewcontroller是一个读取appdelegate对象并填充自身的tableview。

但是,根据Evan Doll(斯坦福讲座)的说法,似乎在AppDelegate中存储数据似乎是一个糟糕的设计。我不想最后为此付钱。有人可以建议一个更好的替代方案吗?

1 个答案:

答案 0 :(得分:7)

为了我自己的用途,我创造了某种MVC结构。我有一个DataManager(单例),它包含数组或字典中的所有必需数据(主要在Models; plain NSObjects中表示)。

视图(Nib文件和ViewControllers)与DataManager交谈,通过get函数获取数据。如果数据已存在于DataManager中,则返回数据(通过通知)。如果不;它将调用转发给Controller然后获取它。

在那个控制器中,我以离线/在线方式(可能对您来说不重要)分离呼叫,如果在线,则呼叫是XML请求,如果是离线,则呼叫是SQLite数据库。

然后,Controller可以在DataManager上设置数据,并将通知发送到视图。

然后循环再次开始,View可以通过DataManager访问数据。 所有这些都发生在异步调用中,因此通知(如果我让DataManager或控制器混淆了视图,它将不是线程安全的。)

我的AppDelegate只进行主视图,控制器和DataManager的第一次初始化,然后接管。

将模型(数据)置于中心位置是件好事,因此您可以轻松地在每个类中访问它,而不会产生太多的类依赖性。

我将大多数类型的功能分成单独的类,例如DataManager for data,用于异步URL请求的DownloadManager,XML Parser,用于从NSDictionaries构建模型的工厂,DatabaseConnector等等。