2012-08-03 6 views
3

숫자 (1,2,3,4 등)를 저장할 객체 유형 (ids - NSNumber, NSString)을 저장하는 변경 가능 NSArray가 있습니다. (예 : +, -, /, * 등) 및 변수 (x, y, z 등)를 포함 할 수 있습니다. 변수와 관련 값을 NSDictionary에 저장하고, 키는 각각 x, y, z와 같은 NSString을 NSNumber 값 5,5,2와 같습니다. NSArray에 저장된 변수를 NSDictionary에 저장된 실제 값으로 대체하려고합니다. 내가 개체를 대체하려고하면 다음 오류가 계속 발생합니다. 도와주세요.- [__ NSArrayI replaceObjectAtIndex : withObject :] : 인스턴스로 전송 된 인식 할 수없는 selector

는 - [__ 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 
} 

답변

9

있는 NSArray의 copy 방법은 항상 불변의 배열을 반환 전송. 변경 가능한 사본이 필요하면 mutableCopy을 사용해야합니다. (그것은 코코아 컨벤션입니다. NSString, NSDictionary, 그리고 일반적으로 변경 가능하고 변경 불가능한 변형이있는 클래스는 모두 같은 방식으로 작동합니다.)

+0

Dang. 나는 그걸 어디서나 읽지 않았다. 나는 하나의 간단한 사실을 이해하려고 얼마나 많은 시간을 할애했는지 말할 수 없습니다. 고마워요, 젠장. –

+0

@ 5lbBass : 당신이 그것을 찾아야 할 경우를 대비하여, 그것은 문서의 다른 장소에 있습니다. 예를 들어, NSCopying 문서에서 : "받는 객체에 '변경 불가능한 객체와 변경 가능 객체'가 적용되면 반환되는 사본은 불변입니다." – Chuck

관련 문제