我試圖讓這個圖形計算器工作。我有兩個視圖控制器,一個用於計算器,另一個用於圖形。分開他們工作正常。但是當我因爲某種原因推動堆棧上的圖形視圖控制器時,它不起作用。UINavigationController推送問題
這是計算的y值在顯示屏上繪製圖形
+ (double)evaluateExpression:(id)anExpression
usingVariableValues:(NSDictionary *)dictionaryOfVariables
{
CalculatorBrain *brain = [[CalculatorBrain alloc] init];
double result = 0;
for (id anObject in anExpression) {
if ([anObject isKindOfClass:[NSNumber class]]) {
brain.operand = [anObject doubleValue];
} else if ([anObject isKindOfClass:[NSString class]]) {
if ([anObject characterAtIndex:0] == '%') {
brain.operand = [[dictionaryOfVariables objectForKey:anObject] doubleValue];
} else {
result = [brain performOperation:anObject];
}
}
}
[brain release];
return result;
}
由於某種原因,部分代碼,這個功能能正常工作的第一個五年時間的叫法,但第六次,調試器說,anObject
已被釋放,我的程序崩潰(用NSZombiesEnabled確認)。 anExpression
是一個帶有NSNumbers或NSStrings的NSArray。我無法理解如何或爲什麼這個數組中的東西被釋放。
這是推動GraphViewController
到的UINavigationController棧的代碼,並賦予它它的屬性:
- (IBAction)graph:(UIButton *)sender
{
GraphViewController *gvc = [[GraphViewController alloc] init];
gvc.graphModel.expression = [self brain].expression;
gvc.graphModel.scale = 30;
[self.navigationController pushViewController:gvc animated:YES];
[gvc release];
}
gvc.graphModel.expression
是獲取傳遞到evaluateExpression: usingVariableValues:
上面的表達式。
,這是呼籲[自腦]代碼.expression
- (id)expression
{
id anExpression = [internalExpression copy];
[anExpression autorelease];
return anExpression;
}
這是使物體進入anExpression
擺在首位代碼:
- (void)addTerm:(id)anObject
{
if (!internalExpression) internalExpression = [[NSMutableArray alloc] init];
[internalExpression addObject:anObject];
}
注:anExpression
,internalExpression
和expression
都意味着幾乎相同的東西。他們持有我想要表達的表情。
我知道這有點複雜,但我希望有人能夠至少指向正確的方向。
是'anObject'公佈內任何地方'performOperation:'? – Jim 2011-03-06 01:17:38
我不這麼認爲,但爲了測試你的想法,我直接給了'performOperation:'anObject'副本而不是'anObject',現在它可以工作!但是我仍然沒有看到'performOperation:'放置'anObject'的位置。 – ladookie 2011-03-06 16:18:45