我的问题更多的是基于设计的问题,但我正在尝试学习新的东西,所以请不要关闭它。这可能有点大,但我试图让我更容易理解我在寻找什么:
我有4个控制器,即ctrlA,ctrlB,ctrlC和ctrlD,它们被一个接一个地调用,即ctrlA调用ctrlB,ctrlB调用ctrlC等等...... ctrlA -> ctrlB -> ctrlC -> ctrlD
。
我在ctrlA中有一个属性,在ctrlC和ctrlD中需要设置它的值。我想到的一种方法是将它传递给每个控制器的init方法,只有当我们的属性有限时,才能理解它。 (我现在只有1个属性。)
代码如下:
班级ctrlA:
@implementation ctrlA
{
- (void)someMethod
{
BOOL isEmpty;
if (somethingIs == true)
{
isEmpty = YES;
ctrlB *controller = [[ctrlB alloc] initWithIsEmpty:isEmpty];
}
}
}
班级ctrlB:
@implementation ctrlB
{
- (void) initWithIsEmpty:(BOOL)isEmpty
{
self.isEmpty = isEmpty;
}
- (void) someMethodB
{
ctrlC *controller = [[ctrlC alloc] initWithIsEmpty:self.isEmpty];
}
}
班级ctrlC:
@implementation ctrlC
{
- (void) initWithIsEmpty:(BOOL)isEmpty
{
self.isEmpty = isEmpty;
}
- (void) useIsEmpty
{
// Use self.isEmpty value in here to set text on a cell and also pass it to ctrlD in below method.
}
- (void) someMethodC
{
ctrlD *controller = [[ctrlD alloc] initWithIsEmpty:self.isEmpty];
}
}
班级ctrlD:
@implementation ctrlD
{
- (void) initWithIsEmpty:(BOOL)isEmpty
{
self.isEmpty = isEmpty;
}
- (void) useIsEmpty
{
// Use self.isEmpty value in here to set text on a cell.
}
}
问题 - 可以按照我上面描述的方式传递属性吗?我想尝试的另一种方法是使用协议,但不确定即使这可能是最好的方法。原因是,我试图传递'isEmpty'的属性是一个局部属性,只在ctrlA的一个方法中设置,即在ctrlA的'someMethod'中。有没有其他更好的方法将属性传递给其他控制器?
答案 0 :(得分:0)
虽然通过初始化器传递值肯定是可以的,但更直接的方法是将共享值保留在模型对象中。控制器ctrlA
将在模型中设置值,然后控制器ctrlC
和ctrlD
将能够在方便时抓取它。
这是an answer illustrating this concept。这是一个描述how to access a model class from multiple view controllers的问题。