0

由 iTunes U 提供的斯坦福 193 课程。我正在尝试复制带有字符串和数字的 NSArray。我想用 NSDictionary 对象替换某些字符串。我的理解是这种方法会比“replaceObjectAtIndex”更快

我遇到的问题是似乎没有任何东西被复制到堆栈中。这些值存在于“程序”中。被复制到项目。但是堆栈中的所有值都是空的。这个问题与检索字典项目无关。无论是否有要替换的变量,都不会将任何内容复制到 NSMutable 数组堆栈中。我插入了一个断点并监视所有变量(程序:索引,项目,堆栈:索引),因为它通过循环。

尤其令人抓狂的是,这个功能曾经有效,而现在却不行。

+(double)runProgram:(id) program
usingVariableValues:(NSDictionary *)variableValues;
{
    NSMutableArray *stack;

        for (id item in program)
        {
            if ([item isKindOfClass:[NSNumber class]]) [stack addObject:item];
            //above line because comparing numbers to strings throws exception
            else if  ( ([item isEqualToString:@"x"]) ||
                       ([item isEqualToString:@"a"]) ||
                       ([item isEqualToString:@"b"]) )  
                {
                    //if a variable is used, copy the value to program instead of the key
                    id replacement =[variableValues objectForKey:item];
                    if (!replacement) replacement = [NSNumber numberWithDouble:0.0];
                    [stack addObject:replacement];
                }
            else [stack addObject:item]; //if not a variable, just copy the item
        }
    //stack should now be a mutable copy of program, but with variables replaced

    return [self popOperandOffStack:stack];
} //runProgram
4

2 回答 2

0

你需要allocinit你的堆栈变量。

于 2012-04-13T04:46:43.547 回答
0

您没有为堆栈变量分配任何内存,您正在尝试将对象添加到 nil 指针。

NSMutableArray* stack = [[NSMutableArray alloc] init];
于 2012-04-13T04:47:56.527 回答