我的问题更多的是基于设计的问题,但我想学习新的东西,所以请不要关闭它。这可能有点大,但我想让它更容易理解我在找什么:在控制器的初始化方法中传递属性
我有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'中。有没有其他更好的方法将属性传递给其他控制器?
是的,我知道模型对象。但在这种情况下,我没有模型对象。该属性属于ctrlA,不是模型属性。 –
@tech_learning如果你没有模型,那么你做的是正确的事情。 – Merlevede
@tech_learning您可以自己决定是否构建模型属性。为了成为模型的一部分,一段数据不需要持久化 - 模型对象可以包含瞬态数据,也可以包含元数据或描述可视属性的数据,而不是数据项本身。将共享数据放在模型中的一个优点是这种方法非常普遍 - 阅读代码的其他人将花更少的时间来理解它。 – dasblinkenlight