0

スタンフォード193クラスの礼儀iTunesUをやっています。私は文字列と数字でNSArrayをコピーしようとしています。特定の文字列をNSDictionaryオブジェクトに置き換えたい。私の理解では、このメソッドは「replaceObjectAtIndex」よりも高速です

私が抱えている問題は、スタックに何もコピーされていないように見えることです。値は「プログラム」にあります。アイテムにコピーされます。ただし、スタック内のすべての値はnullです。この質問は、辞書アイテムの取得に関するものではありません。置換する変数があるかどうかに関係なく、NSMutable配列スタックには何もコピーされません。ブレークポイントを挿入し、ループを通過するときにすべての変数(program:index、item、stack:index)を監視しました。

特に厄介なのは、ある時点でこの関数が機能していたのに、現在は機能していないことです。

+(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 に答える