- [__ NSArrayI replaceObjectAtIndex:withObject:]:发送到实例的无法识别的选择器

时间:2012-08-03 00:44:54

标签: objective-c ios5 nsarray nsdictionary

我有一个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
}

1 个答案:

答案 0 :(得分:10)

NSArray的copy方法始终返回不可变数组,无论原始数据是可变的还是不可变的。如果您想要一个可变副本,则需要使用mutableCopy。 (这是一个Cocoa约定.NSString,NSDictionary,通常任何具有可变和不可变变体的类都将以相同的方式工作。)