내 앱에 Core Data를 사용하는 방법을 배우기 시작했으며 .NET을 사용한 setter 및 getter에 대한 질문이 NSManagedObject
있습니다.
이전 모델에서는이 구문을 사용하여 속성을 선언했습니다.
@interface MyModel : NSObject
{
MyAttributeOfClass *_myAttributeOfClass
}
- (void)setMyAttributeOfClass:(MyAttributeOfClass *)anAttributeOfClass;
- (MyAttributeOfClass *)myAttributeOfClass;
@synthesize
이 일을하는 데 사용할 수 있습니다 . 그러나 다음 @synthesize
과 같은 공용 속성과 함께 사용하면
@property (nonatomic, strong) MyAttributeOfClass *myAttributeOfClass;
개발자는 내 setter를 우회 myAttributeOfClass
하고 다음을 수행 하여 값을 직접 설정할 수 myAttributeOfClass = bar;
있습니다.. setter를 사용하여 작업을 수행하기 때문에이 동작을 허용하고 싶지 않습니다. 이 작업이 완료되지 않으면 내 수업이 더 이상 올바르게 작동하지 않습니다.
이제 이전 모델을 .NET에서 하위 클래스로 분류 된 Core Data 모델로 마이그레이션하고 있습니다 NSManagedObject
.
그러나 데이터 모델에서 클래스를 생성 할 때 속성은 다음과 같이 선언됩니다.
@property (nonatomic, retain) MyAttribute *myAttribute;
따라서 개발자는 setter를 호출하지 않고도이 속성의 값을 설정할 수 있습니다. myAttribute = bar; 그리고 나는 그것을 금지하고 싶습니다.
어떤 제안?
감사 !
Core Data 관리 개체의 속성은 인스턴스 변수에 의해 백업되지 않습니다. 속성 구문을 사용하여 속성을 설정할 수 있습니다.
object.myAttribute = bar;
또는 키-값 코딩 :
[object setValue:bar forKey:@"myAttribute"];
두 경우 모두 setter 메서드
-(void)setMyAttribute:(MyAttribute *)value;
호출됩니다. Setter 및 getter 메서드는 일반적으로 런타임에 동적으로 생성되지만 명시적인 setter 및 / 또는 getter 메서드를 제공 할 수 있습니다.
그러나 "primitive"접근 자 메서드를 호출하여 setter를 우회 할 수 있습니다.
[object setPrimitiveValue:bar forKey:@"myAttribute"];
이것은 커스텀 setter 메소드가 사용하는 것입니다. 그러나 누구나 기본 접근자를 호출 할 수 있습니다.이를 억제 할 방법은 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다