因此,我对数据的发展位置以及存储在应用程序中的位置感到困惑。这不是一个特定的问题,所以希望有人可以提供一个普遍的答案。
我需要在几个UIViewController
实例之间传递一些数据,而我现在正在使用一个名为myManager的单例对象。这个类有一个方法,一个名为+ (LCDataManager *) sharedDataManager
的类方法,该方法基本上检查sharedDataManager
是否已经存在,如果是,返回它,如果不存在,则创建它并设置其变量。这意味着我可以在任何我喜欢的地方引用该类,从多个类中的任何地方访问和修改其变量。
第一个问题:这是正确/最佳/最合适的传递数据的方法吗?我希望它服从MVC,感觉就像它一样,我希望我是对的。
第二个问题:如果我想在该类中放置一个实例方法,并在类方法中调用它,该怎么办?假设我的sharedDataManager
需要调用一个方法来抓取一些对象的一个变量(一个数组),然后将它们放在另一个数组中,然后再将它发回。我不能那样做,可以吗?那是怎么回事?如果我创建该类的实例(而不是使用共享实例),我将失去在多个viewControllers中使用该实例的能力。
我很困惑,看起来这不是我正在做的问题。感谢任何指导,最好不要那些“阅读Apple文档”的东西 - 他们写的就好像你已经知道你在做什么,坦白说我还没有。
答案 0 :(得分:3)
这是正确/最好/最合适的传递数据的方法吗?
只有一个LCDataManager实例,但使用Singleton模式has potential problems没有任何问题。另一种方法是初始化一个LCDataManger并将其传递到任何需要的位置。
如果我想在该类中放置一个实例方法,并在类方法中调用它,该怎么办?
访问者+ (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
}
答案 1 :(得分:3)
第一个问题:这是正确/最佳/最合适的传递数据的方法吗?我希望它服从MVC,感觉就像它一样,我希望我是对的。
您的设计完全符合MVC标准。
第二个问题:如果我想在该类中放置一个实例方法,并在类方法中调用它,该怎么办?
你可以肯定地定义一个实例方法并像这样调用它:
[[MyModelClass sharedModel] myInstanceMethod];
确实,[MyModelClass sharedModel]
将为您提供MyModelClass
的实例(应该保证它是唯一的,因为它是单身人士)。
如果你想从sharedModel
类方法调用实例方法,你也可以这样做,因为sharedModel
拥有对你的单例的引用,所以它可以向它发送消息。
答案 2 :(得分:1)
Matthijs Hollemans在他的博客上提供了一个非常好的三部分教程,介绍了让视图控制器相互通信的正确方法:
答案 3 :(得分:0)
这个开发架构没有问题,它是iOS开发中必须使用的(我认为)。在书IOS Programming: The Big Nerd Ranch Guide中,他们称之为模型视图控制器商店。
关于你的第二个问题,是的,你可以声明实例方法,然后从你的sharedDataManager
打电话。什么是不常见的是创建单例类的其他实例,但它是可能的。