2011-10-17 5 views
1

그래서 최근 IOS X 5 SDK가 필요했기 때문에 XCode 4.2로 업그레이드되었습니다.이상한 XCode 4.2 및 코어 데이터 동작

아무튼 내 앱을 컴파일하고 실행하려고했을 때 더 이상 실행되지 않는 것으로 나타났습니다. 이는 핵심 데이터 엔티티의 속성이 어떻게 든 읽기 전용으로 표시된다는 사실 때문입니다.

나는 이것을하지 않았으며 오류 메시지 외의 다른 증거는 찾을 수 없다. 내 핵심 데이터에

는 객체를 관리주의라는 :

@interface Note : NSManagedObject 
@property (nonatomic, retain) NSString * title; 
... 


@implementation Note 
@dynamic title; 
... 

나중에 - 다른 곳 - 코드에서, 내가하려고이 :

self.note.title=self.noteTitle.text; 

실행이 라인에 도달, 다음과 같은 오류가 표시됩니다.

Property 'title' is marked readonly on class 'Note'. Cannot generate a setter method for it. 
-[Note setTitle:]: unrecognized selector sent to instance 0x80ae3d0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Note setTitle:]: unrecognized selector sent to instance 0x80ae3d0' 

무엇을 ?? 나는 setter를 직접 코딩 할 수 있습니다. 오류는 그것이 나를 위해 생성 할 수 없다고 말합니다. 그러나 나는 여기서 일어난 일을 정말로 이해하고 싶습니다.

이 엔티티의 관리 대상 개체 파일을 재생성했는데 작동하지 않았습니다. 나는 새로운 데이터 모델을 만들었고, 그렇게해서는 안되는 것이 아무것도 설정되지 않았는지 확인했다.

편집 : 나는 중요한 맛있는 음식으로 판명 된 것을 버렸습니다. 나는 주 (관리 대상)에 정의 된 범주가 있습니다. 카테고리에서 객체 (MKAnnotation)에 프로토콜을 추가했습니다. 내 범주는 다음과 같이 정의되었습니다.

@interface Note (Extras) <MKAnnotation> 

나는 프로토콜에서 '필요'를 제거했지만 참조를 제거하지 않았습니다. 내가 그랬을 때 모든 것이 원래대로되어야했습니다.

그래서 내 문제를 해결했지만 궁금한 점이 있습니다. 관리 대상에 프로토콜을 추가하는 것은 나쁜 행동입니까?

감사합니다.

+0

당신이 뭔가에 '제목'속성의 이름을 변경하려고 했습니까? 때로는 특정 속성 이름을 사용할 때 오류 메시지가 나타납니다. 아마도 메모로 시도해보십시오. 제목. –

+0

글쎄, 할 수있어. 업그레이드 전까지는 잘 작동했습니다. 아마 사과가 예약어 목록을 변경했을 수도 있지만 비교적 사소한 버전으로 변경 되었습니까? – Chris

+0

이 문제가 해결되었습니다. 아마 내가해야 할 모든 것을 언급하지는 않았다. 추가 정보를 포함하도록 질문을 수정했습니다. – Chris

답변

2

NSManagedObject에 프로토콜을 추가하는 것은 나쁘지 않습니다. 왜 당신이 원하는지 많은 이유가 있습니다.

@property (nonatomic, readonly, copy) NSString *title 

.. 같은 이름의 동적 특성과 충돌 :