【问题标题】:Unsure of how to manage data in ios app不确定如何在 ios 应用中管理数据
【发布时间】:2012-07-18 21:10:06
【问题描述】:

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

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

【问题讨论】:

    标签: ios oop model-view-controller


    【解决方案1】:

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

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

    本文通过示例代码介绍了在 iPhone 中存储数据的 4 种主要方法。

    1)NSUserDeafult

    2) 属性列表

    3) SQLLite

    4) 核心数据

    【讨论】:

    • 这有助于保存数据,但我的方法在应用程序中管理数据是否可行?是否可以只创建我的模型对象的单个实例,然后在我的其他类中使用它?
    【解决方案2】:

    我将从使用 CoreData 设计架构开始。 IMO,最好从使用 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, ...;
    

    我不确定这是否是首选方法,但我已经通过这种方法取得了很多成功。希望这会有所帮助!

    【讨论】:

    • 这似乎是一种非常可行的数据处理方式。谢谢!
    • 解决 repo 类需要一些时间,但一旦完成,您可以将它放到任何应用程序中,它就可以工作。您再也不会考虑使用 CoreData 进行数据访问了 :)
    猜你喜欢
    • 2017-02-16
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多