2012-07-19 31 views
0

我希望这个问题不是太笼统/暧昧......不确定

我正在写一个iPhone问答游戏应用时遇到麻烦找出最好的方式来处理数据。目前我正在考虑让一个Model类拥有一组“User”类,每个类都有一组用户特定的“Question”类。我希望能够从我的任何视图控制器访问总体模型,但这意味着我可能必须将模型对象传递给任何新的视图控制器,使用单例或执行其他操作。从其他类访问我的Model对象的最佳方式是什么?我不确定的另一个因素是能够保存数据 - 我是否必须使用Core Data/SQLite来保存单个模型对象,还是有更简单的方法?

回答

2

我通过设计使用CoreData一个模式启动。国际海事组织,它最好开始使用CoreData,因为那样你不需要将你的数据层转换成CoreData,只要你的应用扩展到一个或两个简单的对象之外。

另一条路线是创建一个返回数据的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, ...; 

我不知道这是首选的方法,但我已经有很多用这种方法的成功。希望这可以帮助!

+0

这似乎是处理数据的一种非常可行的方式。谢谢! – 2012-07-19 16:41:00

+0

需要一点时间才能让repo类被淘汰,但是一旦你这样做了,你可以将它放在任何应用程序中并且它可以工作。你再也不会再考虑用CoreData再次访问数据:) – jerrylroberts 2012-07-19 16:44:49

2

检查这个环节,这将帮助你很多

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

此盖4点主要的方式来在iPhone的数据存储与示例代码。

1)NSUserDeafult

2)属性列表

3)SQLLite

4)核心数据

+0

这有助于保存数据,但我的方法是否可行,以管理应用程序中的数据?是否可以只创建一个Model对象的单个实例,然后在我的其他类中使用它? – 2012-07-19 16:34:02