在控制器的init方法中传递属性

时间:2014-03-04 02:45:00

标签: objective-c properties controllers

我的问题更多的是基于设计的问题,但我正在尝试学习新的东西,所以请不要关闭它。这可能有点大,但我试图让我更容易理解我在寻找什么:

我有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'中。有没有其他更好的方法将属性传递给其他控制器?

1 个答案:

答案 0 :(得分:0)

虽然通过初始化器传递值肯定是可以的,但更直接的方法是将共享值保留在模型对象中。控制器ctrlA将在模型中设置值,然后控制器ctrlCctrlD将能够在方便时抓取它。

这是an answer illustrating this concept。这是一个描述how to access a model class from multiple view controllers的问题。