我有一個@property
在我的應用程序的模型類,將調用prepareForSegue:
。它在我的CalculatorBrain
課堂上公開宣佈。如何從prepareForSegue調用「自己」屬性?
@property (readonly) id program.
吸氣看起來是這樣的:
- (id)program
{
return [self.programStack copy];
}
如果你需要知道,programStack
是CalculatorBrain
一個NSMutableArray @property
存儲所有的操作和操作數的用戶輸入。
計算器的控制器是CalculatorViewController
,我有一個大腦(CalculatorBrain)的私人財產。在我所有的CalculatorViewController方法中,我可以完美地調用self.brain.program
。但是當我嘗試從我的prepareForSegue:
方法中調用這個getters時,這將返回一個空數組。下面是我在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 ...行設置一個斷點,這裏就是我們得到:
兩個快照是從同樣的運行。所以我的問題是,當prepareForSegue:調用它時,爲什麼self.brain.program的值有所不同?也許這是一個非常愚蠢的錯誤,但我無法發現它。我會很感激這裏的一些幫助。我對iOS開發很新穎。
更新:問題似乎與programStack。在prepareForSegue:
方法發揮作用之前,它在某種程度上是niling
。所以當這個運行時,我們會得到新的空的programStack。其他一些方法(不是我的,據我所知)正在清除它。
任何人有任何想法可以清除我的財產在這裏?我有strong
指向brain
(CalculatorViewController中的CalculatorBrain *)和programStack
(CalculatorBrain中的NSMutableArray *)。
請在GraphingCalcViewController.h中發佈newController.program的公共聲明,並將id更改爲NSMutableArray。將它聲明爲ID沒有意義。 – Pochi