2011-10-14 1 views
0

코어 데이터 엔티티 Series에 일시적 attr indexCurrent이 있습니다. 외부 클래스가 indexCurrent에 액세스 할 때, 나는 그들을 반환하기 전에 indexCurrent의 값을 업데이트해야하는지 확인하는 데 사용할 수있는 arg를 보내길 원합니다. 따라서 indexCurrent을 개인 변수로 선언하고 arg를 사용하여 특수한 메서드를 통해서만 외부 액세스를 허용합니다.코어 데이터 과도 특성을 개인용으로 만들 수 없습니다.

그러나 컴파일러에서 "메서드를 찾을 수 없음"경고를 발행해도 외부 클래스가 indexCurrentsetindexCurrent:을 모두 호출 할 수 있으며이 오류 코드는 완전한 성공으로 실행됩니다. 여기

Series 인터페이스 :

@interface Series : NSManagedObject { 
@private 
NSNumber *indexCurrent; 
} 

indexCurrent이 propertized되지 않으며, 구현 파일에서 동적으로 선언되지 않으며, 나는 indexCurrent 또는 setindexCurrent: 접근을 작성하지 않았습니다.

내가 뭘 잘못하고 있니? indexCurrent을 비공개로 설정하려면 어떻게해야하나요?

답변

2

@dynamic은 어떤 코드도 생성하지 않습니다. 핵심 데이터는 @dynamic을 사용하는지 여부에 관계없이 속성 접근 자의 코드를 생성합니다. @dynamic은 코드가 생성 될 것이라는 것을 컴파일러에게 알리기 때문에 누락 된 메소드에 대해 경고 할 필요가 없습니다. 그래서 경고를 받지만 런타임 오류는 발생하지 않습니다.

인스턴스 변수의 @private는 그리 많은 일을하지 않습니다. 기본값은 @protected이며, 이는 외부 클래스가 클래스 자체 및 하위 클래스 만 액세스 할 수 있음을 의미합니다. 어떤 경우이든 기본 코어 데이터 접근자는 인스턴스 변수를 사용하지 않습니다.

나는 당신이 원하는 것을 어떻게하는지 잘 모릅니다.

+0

개인 관리 객체 속성과 같은 것이 아니기 때문에 dot-syntax가 없다는 점에 유의해야합니다 (@property 행이 없으면 작동하지 않습니다) 제 디자인을 강요합니다. 귀하의 설명에 감사 드리며, Core Data에 대한 좋은 해부학 교훈을 얻습니다. – Wienke

+1

public과 private의 전체 개념은 실제로 Objective-C 디자인 패턴이 아닙니다. 그것은 존재하지만 나는 그것에 의존하지 않을 것이다. 마커는 인간이 읽을 수있는 곳이 더 많습니다. 이 경고를 무시하면 컴파일러는 방해가되지 않습니다. –