我@property
的应用程序的模型类中有一个将调用prepareForSegue:
. 在我的CalculatorBrain
课堂上是这样公开宣布的。
@property (readonly) id program.
吸气剂看起来像这样:
- (id)program
{
return [self.programStack copy];
}
如果您需要知道,其中programStack
一个存储用户输入的所有操作和操作数。NSMutableArray @property
CalculatorBrain
计算器的控制器是CalculatorViewController
,我有一个大脑的私有财产(一个 CalculatorBrain)。在我所有的 CalculatorViewController 方法中,我都可以完美地调用self.brain.program
. 但是当我尝试从我的prepareForSegue:
方法中调用这个 getter 时,它会返回一个空数组。这是我在 CalculatorViewController 中的一个方法示例,它可以完美地调用 self.brain.program:
- (IBAction)enterPressed
{
[self.brain pushOperand:[self.display.text doubleValue]];
self.userIsInTheMiddleOfEnteringANumber = NO;
// update history label
NSArray *stack = self.brain.program; //This is to test self.brain.program
self.history.text = [CalculatorBrain descriptionOfProgram:self.brain.program];
}
如果我们在 self.history.text... 行设置断点检查值,我们会得到:
没错,当时程序有 2 个对象。
现在这是我的prepareForSegue:
方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Graph"]) {
GraphingCalcViewController *newController = segue.destinationViewController;
// send program to newController
NSArray *stack = self.brain.program; //This is to test self.brain.program
newController.program = self.brain.program;
}
}
如果我们在 newController.program... 行设置断点,我们会得到:
两个快照都来自同一次运行。所以我的问题是,为什么 self.brain.program 的值在 prepareForSegue: 调用时会有所不同?也许这是一个非常愚蠢的错误,但我无法发现它。我会很感激这里的一些帮助。我对iOS开发很陌生。
更新:问题似乎出在 programStack 上。在该方法发挥作用niling
之前,它以某种方式出现了。prepareForSegue:
所以当这个运行时,我们会得到新的空程序堆栈。其他一些方法(据我所知不是我的)正在清除它。
有人知道什么可能会在这里清理我的财产吗?我有两个strong
指向brain
(CalculatorViewController 中的CalculatorBrain *)和(CalculatorBrain 中的programStack
NSMutableArray *)的指针。