我有一个Mutable NSArray存储对象类型(ID - NSNumber,NSString),它们将存储数字(1,2,3,4等),操作(+, - ,/,*等),和变量(x,y,z等)。我将变量和相关值存储在NSDictionary中,键的NSStrings等于x,y,z,NSNumber值分别为5,5,2。我想将我的NSArray中的变量替换为存储在我的NSDictionary中的实际值。当我尝试替换对象时,我不断收到以下错误。请帮忙。
- [__ NSArrayI replaceObjectAtIndex:withObject:]:发送到实例的无法识别的选择器
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithDouble:5],@"x",
[NSNumber numberWithDouble:5],@"y",
[NSNumber numberWithDouble:2],@"z",
nil];
+ (double)runProgram:(id)program
usingVariableValues:(NSDictionary *)variableValues;
{
// introspection - ensure program is NSArray and variableValues is NSDictionary
if ([program isKindOfClass:[NSArray class]] && [variableValues isKindOfClass: [NSDictionary class]])
{
// array for program stack
NSMutableArray *stack = [program copy];
// Loop to replace variables with actual values in NSDictionary
for (NSUInteger i = 0; i < [stack count]; i++)
{
NSLog(@"object at index = %@", [stack objectAtIndex:i]);
if ([[stack objectAtIndex:i] isKindOfClass:[NSString class]] && [[stack objectAtIndex:i] isEqualToString: @"x"])
{
// replace variable with value in corresponding value in dictionary
NSNumber *numberKeyValue = [variableValues objectForKey:@"x"];
[stack replaceObjectAtIndex:i withObject:numberKeyValue];
}
}
return 0
}
答案 0 :(得分:10)
NSArray的copy
方法始终返回不可变数组,无论原始数据是可变的还是不可变的。如果您想要一个可变副本,则需要使用mutableCopy
。 (这是一个Cocoa约定.NSString,NSDictionary,通常任何具有可变和不可变变体的类都将以相同的方式工作。)