0

我希望这个问题不是太笼统/模棱两可......

我正在编写一个 iphone 问答游戏应用程序,但无法找出处理数据的最佳方式。目前我正在考虑拥有一个模型类,该类包含一组“用户”类,每个类都有一组特定于用户的“问题”类。我希望能够从我的任何视图控制器访问总体模型,但这意味着我可能必须将模型对象传递给任何新的视图控制器、使用单例或做其他事情。从其他类访问我的模型对象的最佳方法是什么?我不确定的另一个因素是能否保存数据——我是否必须使用 Core Data/SQLite 来保存我的单个模型对象,还是有更简单的方法?

4

2 回答 2

2

检查此链接,这将对您有很大帮助

链接:http: //mobile.tutsplus.com/tutorials/iphone/iphone-sdk_store-data/

这涵盖了在 iPhone 中存储数据的 4 种主要方法以及示例代码。

1)NSUserDeafult

2) 物业清单

3)SQLLite

4) 核心数据

于 2012-07-19T16:18:04.803 回答
2

我将从使用 CoreData 设计模式开始。IMO,最好从使用 CoreData 开始,因为如果您的应用程序扩展到一两个简单对象之外,您将永远不必将数据层转换为 CoreData。

另一种方法是创建一个返回数据的 Web 服务......所以你只需调用该服务,它就会返回一个用户对象的集合。您可以发送带有问题的整个对象图,或者创建另一个服务来返回特定用户的问题集合。如果您有一个方便的 Web 服务器,则此方法的扩展性最好,因为您不必依赖应用程序更新来将新问题输入您的系统。我仍然会使用 CoreData 来缓存结果......这样你就不会一直下​​载相同的信息。

因此,在访问 CoreData 对象时,我使用了一个单例的存储库类。这使得任何视图控制器都可以轻松获取存储库的实例并获取一些数据。类似的东西可能是这样的;

[[Repository defaultRepository] findFirst:[User class] 
                                           where:@"name == 'John'"]

获取数据有很多冗余代码,因此将它们包装在一个对象中将有助于从视图控制器中获取所有讨厌的代码,例如谓词和排序。您可以看到我在 where 子句中利用 va_list 的位置,这样我就可以将该字符串直接注入到我的谓词中。以下是您可以实现的其他一些方法:

- (NSArray *) findAll:(Class)entity 
            sortByKey:(NSString *)key
            ascending:(BOOL)ascending;

- (NSArray *) findAll:(Class)entity 
            sortByKey:(NSString *)key 
            ascending:(BOOL)ascending
                where:(NSString *)format, ...;

- (id) findFirst:(Class)entity 
           where:(NSString *)format, ...;

我不确定这是否是首选方式,但我已经用这种方法取得了很大的成功。希望这可以帮助!

于 2012-07-19T16:32:44.090 回答