개체 속성의 문자열 이름을 알고 있습니다. 문자열을 사용하여 속성을 가져오고 설정하는 방법은 무엇입니까?속성 이름을 사용하여 Objective-C 속성에 동적으로 액세스하십시오.
24
A
답변
48
@weichsel이 정확하지만, 더 나은 방법이있다.
사용 :
[anObject valueForKey: @"propertyName"];
과 분명히
[anObject setValue:value forKey:@"propertyName"];
,
@"propertyName"
동적 런타임에 구성되는
NSString
이 될 수 있습니다.
이 기술은 Key Value Coding이라고하며 코코아의 기본입니다.
-valueForKey
은 속성이 개체에 반환하는 모든 형식을 "상자에 넣으려면"필요한 작업을 수행하기 때문에 더 좋은 이유는 무엇입니까? 따라서 속성이 int
인 경우 int를 포함하는 NSNumber
인스턴스를 반환합니다.
이 처리하는 것이 훨씬 쉽다 - performSelector
것이다 메모리의 포인터의 가치에 맞게 일어날 유형에만 작동합니다.
또한 -setValue:forKey:
입니다.
2
@synthesize propertyName
은 getter 및 setter 메소드의 생성을 자동화합니다. 당신이있는 NSString으로 선택이있는 경우, performSelector:NSSelectorFromString
을 사용할 수 있습니다
컴파일러는
- (id)propertyName;
- (void)setPropertyName;
를 생성합니다.
예컨대 :
[object performSelector:NSSelectorFromString(@"propertyName") ...]
+1
속성을 설정하려면'performSelector : withObject :'를 사용해야합니다. –
매우 편리합니다! 그걸 몰랐어. –