2009-07-08 5 views
2

KVC로 일부 속성을 업데이트하려고합니다. 속성이 합성되었습니다. 이유 때문에 캐치되지 않는 예외 'NSUnknownKeyException'응용 프로그램 종료 : '[< MyViewController를코코아 KVC : "클래스가 키 값 코딩을 준수하지 않습니다"

[self setValue:[NSNumber numberWithInt:intValue] forKey:@"myObject.value"]; 

와 함께 불면 :

myObject.value = intValue; 

이 작동하지 않습니다

이 줄 작동 0xd1cec0> setValue : forUndefinedKey :] :이 클래스는 키 myObject.value에 대해 키 값 코딩을 준수하지 않습니다. '

위의 메서드 (awakeFromNib)를 사용하면 같은 클래스의 다른 인스턴스가 setValue : forKey : calls에 응답합니다. 유일한 차이점은이 특정 인스턴스가 IB에서 생성되고 유선화된 것입니다.

+0

[NSString stringWithFormat : @ "myObject.value"]는 중복되어 있으므로 인수가없는 형식을 사용하고 있습니다. 아마 당신은 @ "myObject.value"를 사용해야 만합니다. –

답변

7

그것은 그 객체에 대한 유효한 키가 아니며 정말로 그렇지 않다는 것을 알려줍니다. "myObject.value"는 하나의 키가 아닌 키 패스입니다.

+0

doh. 나는 그걸 알았어 ... 고마워! – Meltemi

1

나는 척에 동의합니다.

내가 대신이 작업을 수행 할 필요가 있다고 생각 :

[self setValue:[NSNumber numberWithInt:intValue] forKeyPath:@"myObject.value"]; 

나 같은 키 경로의 각 부분을 통해

가 :

id myObject = [self objectForKey:@"myObject"]; 
[myObject setValue:[NSNumber numberWithInt:intValue] forKey:@"value"]; 
9

당신은 -[NSObject setValue:forKey:] 두 번째 인수로 키 경로를 전달할 수 없습니다. 대신 setValue:forKeyPath:를 사용하려면 :

[self setValue:[NSNumber numberWithInt:intValue] forKeyPath:@"myObject.value"]; 

나의 이해는 setValue:forKey:는 성능 최적화로 제공된다는 점이다. 키 경로를 사용할 수 없기 때문에 키 문자열을 구문 분석 할 필요가 없습니다.

관련 문제