我将从使用 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, ...;
我不确定这是否是首选方式,但我已经用这种方法取得了很大的成功。希望这可以帮助!