スタンフォード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