1

나는어떻게 목표 -c 컴파일러가 선언되지 않은 속성이 동적이라고 가정 할 수 있습니까?

id foo = [MyObject new]; 
foo.bar = [NSObject new]; 

을 쓸 수 있도록하고 싶습니다 그러나 나는 다음과 같은 오류 얻을 : 그 소리가 나는 억제 할 수있는 경고를보고하지 않기 때문에

/blah/blah/blah/Blah.m:32:9: error: property 'bar' not found on object of type '__strong id' 
foo.bar = [NSObject new]; 
    ^
1 error generated. 

, 나는 가정이 문제가 영구적입니다 ,하지만 누군가가 나를 다르게 말할 수 있기를 바랍니다.

분명히, 이것이 기본적으로 중단된다는 것을 알고 있지만, 작동시키기 위해 Dynamic Method Resolution을 사용할 계획입니다.

+0

'MyObject' 헤더에'bar' 속성이 선언되어 있습니까? –

+0

아니요. 동적 메서드 해상도를 사용하여 작동하도록하고 싶습니다. –

답변

3

이와 같이 일반 개체 포인터에 도트 구문을 사용할 수 없습니다.

이유는 컴파일러가 [foo setBar:baz]-foo.bar = baz;를 다시 작성합니다,하지만 당신은 세터의 이름, @property (strong, nonatomic, setter=setListOfApples:) NSArray * listOfOranges;을 변경할 수 있기 때문에, 속성 선언을 볼 수 있어야한다는 것입니다.

표준 메시지 보내기 구문을 사용하면이 방법이 유용합니다. 즉, 컴파일러에게 객체의 정확한 유형을 알려줌으로써 속성의 설정자를 찾거나 사용하고자하는 정확한 설정자 이름을 말해야합니다.

+0

감사합니다. 그것은 모두 완벽하게 이해됩니다. –

-2

@dynamic이 처리합니까?

@dynamic foo; @ 동적 막대;