1

所以我让自己对我的数据去哪里以及它在我的应用程序中的存储位置感到困惑。这不是一个具体的问题,所以希望有人可以提供一个笼统的答案。

我需要在几个UIViewController实例之间传递一些数据,而我目前正在使用一个名为我的 dataManager 的单例对象来做这件事。这个类有一个方法,一个类方法,被称为+ (LCDataManager *) sharedDataManager,并且该方法基本上检查是否sharedDataManager已经存在,如果存在,则返回它,如果不存在,则创建它并设置它的变量。这意味着我可以在我喜欢的任何地方引用该类,在我喜欢的任何地方访问和修改其变量,跨多个类。

第一个问题:这是像这样传递数据的正确/最佳/最合适的方法吗?我希望它服从 MVC,感觉就像它,我希望我是对的。

第二个问题:如果我想在该类中放置一个实例方法,并从类方法中调用它怎么办?假设我sharedDataManager需要调用一个方法来获取一些对象的一个​​变量(一个数组),并将它们放入另一个数组中,然后再次将其发送回来。我不能那样做,可以吗?有什么办法呢?如果我创建该类的实例(而不是使用共享实例),我将失去跨多个 viewController 使用该实例的能力。

我非常困惑,似乎这不是我要解决的问题。感谢任何指导,最好不要那些“阅读 Apple 文档”的东西——他们写的好像你已经知道你在做什么,坦率地说我还不知道。

4

4 回答 4

3

这是像这样传递数据的正确/最佳/最合适的方法吗?

只拥有一个 LCDDataManager 实例并没有错,但是使用 Singleton 模式有潜在的问题。另一种方法是只初始化一个 LCDDataManger 并将其传递到需要的地方。

如果我想在该类中放置一个实例方法,并从类方法中调用它怎么办?

访问者+ (LCDataManager *) sharedDataManager应该只返回实例。我想你想要的是类似的东西

+ (LCDataManager *)preparedDataManager {
    LCDataManager *shared = [self sharedDataManager];
    [shared doSomeInstanceMagic];
    return shared;
}

- (void)doSomeInstanceMagic {
    // magic!
    // grab some objects one of its variables (an array),
    // and put them in another array
}
于 2013-02-21T15:25:40.117 回答
3

第一个问题:这是像这样传递数据的正确/最佳/最合适的方法吗?我希望它服从 MVC,感觉就像它,我希望我是对的。

您的设计完全符合 MVC。

第二个问题:如果我想在该类中放置一个实例方法,并从类方法中调用它怎么办?

您当然可以定义一个实例方法并像这样调用它:

[[MyModelClass sharedModel] myInstanceMethod];

事实上,[MyModelClass sharedModel]会给你一个实例MyModelClass应该保证是唯一的,因为它是一个单例)。

如果你想从sharedModel类方法调用实例方法,你也可以这样做,因为sharedModel拥有对你的单例的引用,所以它可以向它发送消息。

于 2013-02-21T15:26:22.163 回答
1

Matthijs Hollemans在他的博客上有一个很好的三部分教程,介绍了让视图控制器相互通信的正确方法:

于 2013-02-21T15:34:09.430 回答
0

这个开发架构没有问题,是iOS开发中必须使用的(我认为)。在IOS Programming: The Big Nerd Ranch Guide一书中,他们称之为Model View Controller Store

关于你的第二个问题,是的,你可以声明实例方法,然后从你的sharedDataManager. 不常见的是创建单例类的其他实例,但这是可能的。

于 2013-02-21T15:21:03.080 回答