2011-12-20 25 views
0

我有這樣的功能:例外:對象不能是零

+ (double)runProgram:(id)program usingVariableValues:(NSDictionary *)variableValues 
{ 
    NSMutableArray *stack = [CalculatorBrain programToStack:program]; 
    if (variableValues) { 
     NSSet *variables = [CalculatorBrain variablesUsedInProgram:program]; 
     NSUInteger index = 0; 
     for (id obj in [stack copy]) { 
      if ([variables containsObject:obj]) { 
       [stack replaceObjectAtIndex:index withObject:[variableValues valueForKey:obj]]; 
      } 
      index++; 
     } 
    }  
    return [self popOperandOffStack:stack];   
} 

當我將它傳遞一個nil對象variableValues程序崩潰和提出的例外是,我不能replaceObjectAtIndex:withObject:用零目的。我明白爲什麼異常被調用,但不應該if (variableValues)防止整個塊甚至被輸入,如果variableValues是零?

+0

你確定這不是'popOperandOffStack'是造成死機? – dasblinkenlight 2011-12-20 03:56:13

+0

沒有調用replaceObjectAtIndex:withObject:在那裏,所以它不應該在那裏。 – birarda 2011-12-20 04:02:25

+0

valueForKey返回nil,因爲沒有該鍵的輸入。 – 2011-12-20 04:12:39

回答

0

你可以有一個NSDictionary那不是零但不包含obj的關鍵.......

+0

在此之前調用此代碼執行:'self.testVariableValues = nil'然後'[self.testVariableValues copy ]'作爲參數發送到該函數 – birarda 2011-12-20 04:01:53