我通过设计使用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, ...;
我不知道这是首选的方法,但我已经有很多用这种方法的成功。希望这可以帮助!
这似乎是处理数据的一种非常可行的方式。谢谢! – 2012-07-19 16:41:00
需要一点时间才能让repo类被淘汰,但是一旦你这样做了,你可以将它放在任何应用程序中并且它可以工作。你再也不会再考虑用CoreData再次访问数据:) – jerrylroberts 2012-07-19 16:44:49