我希望这个问题不是太笼统/含糊......
我正在写一个iphone测验游戏应用程序,并且无法找出处理数据的最佳方法。目前我正在考虑拥有一个Model类,它包含一个“User”类数组,每个类都有一个特定于用户的“Question”类数组。我希望能够从任何视图控制器访问总体模型,但这意味着我可能必须将模型对象传递给任何新的视图控制器,使用单例或执行其他操作。从其他类访问我的Model对象的最佳方法是什么?我不确定的另一个因素是能够保存数据 - 我是否必须使用Core Data / SQLite来保存我的单个Model对象,还是有更简单的方法?
答案 0 :(得分:2)
检查此链接,这将对您有所帮助
链接:http://mobile.tutsplus.com/tutorials/iphone/iphone-sdk_store-data/
这包括使用示例代码在iPhone中存储数据的4种主要方式。
1)NSUserDeafult
2)财产清单
3)SQLLite
4)核心数据
答案 1 :(得分: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, ...;
我不确定这是否是首选方式,但我在这种方法上取得了很大的成功。希望这有帮助!