문제

나는 그것이 유용 할 정도로 일반적으로 도서관을 쓰려고 노력하고 있습니다. 문제는 다른 클래스의 속성을 업데이트해야한다는 것입니다. 속성과 클래스는 동적이어야합니다.

이제 공개 변수를 사용하여 문제가 없으며 업데이트하려는 변수에 대한 포인터를 전달할 수 있습니다. 그러나 클래스 속성을 객관적으로 자유롭게 사용하기 때문에 클래스의 속성을 설정하는 것이 매우 유용합니다.

이제 재산이 객체 유형 인 한 원시 유형 특성을 설정하려고하는 한 문제가되지 않습니다.

내 현재 코드는 속성을 위해이 라인을 따라 무언가를 보게됩니다.

NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:[[myInstance class] instanceMethodSignatureForSelector:mySelector]];
[invoc setTarget:myInstance];
[invoc setSelector:mySelector];
[invoc setArgument:&myObject atIndex:2];
[invoc invoke];

그러나 setargument 메소드는 포인터 유형 만 허용하지만 속성은 원시 유형을 가질 수 있습니다. 원시 유형 특성을 동적으로 할당하는 방법이 있습니까?

도움이 되었습니까?

해결책

KVO는 귀하를 위해 전환해야합니다.

[object setValue:[NSNumber numberWithInt:i] forKey:@"myVar"];

변환합니다 NSNumber 당신의 경우 int에게 myVar 다음과 같이 정의됩니다.

int myVar;
...
@propery (nonatomic) int myVar;

다른 팁

"그러나 setargument 메소드는 포인터 유형 만 허용합니다"당신은 무언가를 놓치고 있습니다. 논쟁 setArgument: 메소드에 전달하는 데이터가 아닙니다. 데이터의 주소입니다 (OF 무엇이든 타입) 당신은지나 가고 있습니다. 현재 위의 코드는 객체 포인터의 주소를 가져옵니다 (포인터에 대한 포인터입니다). 정수의 주소를 쉽게 가져갈 수 있습니다 (신경 쓰지 않음). 다시 말해, 동일한 정확한 코드는 유형에 관계없이 이미 작동합니다.

NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:[myInstance methodSignatureForSelector:mySelector]];
[invoc setTarget:myInstance];
[invoc setSelector:mySelector];
int myInt = 42;
[invoc setArgument:&myInt atIndex:2];
[invoc invoke];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top