2011-07-06 3 views
1

핵심 데이터의 내 엔티티 중 하나에 NSNumber 속성을 추가하기로 결정했습니다. 코드를 지우고 시뮬레이터에서 앱을 삭제했습니다. 다음 appDelegate에 다음 코드를 추가하고 내 NSNumber 특성이 존재하지 않는다고 알려줍니다.코어 데이터 속성이 만들어지지 않았습니다.

People *PeopleA = [NSEntityDescription insertNewObjectForEntityForName:@"People" inManagedObjectContext:context]; 
PeopleA.name = @"Paul"; 
PeopleA.number = [NSNumber numberWithInt:12]; 

name 속성은 이전에 만들어졌지만 항상 효과가 있습니다.

-[People setNumber:]: unrecognized selector sent to instance 0x4d5eeb0 

그래서 나는 po 0x4d5eeb0를하고 이름 속성하지만, 번호없는 일이 있음을 보았다는 PeopleA.number에 도달 할 때 함께하지만 충돌합니다. 내 핵심 데이터 클래스는 XCode가 나를 위해 만들었 기 때문에 좋을 것입니다.

무엇이 문제 일 수 있습니까?

여기

#import "People.h" 
#import "Group.h" 

@implementation People 
@dynamic name; 
@dynamic image; 
@dynamic number; 
@dynamic group; 

@end 

포 0x4d5eeb0 저를 얻는다 내 People.h

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 

@class Group; 

@interface People : NSManagedObject { 
@private 
} 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) id image; 
@property (nonatomic, retain) NSNumber * number; 
@property (nonatomic, retain) Group * group; 

@end 

People.m입니다 :

<People: 0x5932290> (entity: People; id: 0x59322f0 <x-coredata:///People/t83A9C7D9-4F7A-4189-9EC5-7695968A29552> ; data: { 
    group = nil; 
    name = Paul; 
+0

'People.h' 콘텐츠를 게시하십시오. – akashivskyy

+0

'People.h'를 포함하도록 게시물을 편집했습니다 – tazboy

+0

'People.m' 파일에'number' 속성을 합성 했습니까? '@dynamic number; '가 있습니까? – akashivskyy

답변

0

의심스러운 경우 삭제하십시오.

2 개의 xcdatamodel 파일과 xcdatamodeld 파일이 삭제되었습니다. 또한 해당 폴더에서 삭제되었습니다. 그런 다음 새 것을 만들었습니다. 처음에는 몇 가지 문제가 있었지만 현재 실제로 작동합니다.

Group.h 파일에 addPeople 메서드가 없다고 생각하면 xcode에 약간의 문제가 있습니다. 그래서 그것은 그 방법이나 다른 방법들에 반응하지 않을 것이라고 말합니다. 또한 빌드시에 Lexical or Preprocessor Issue: 'Group.h' file not found 오류가 발생하지만 모든 것이 여전히 작동하는 것 같습니다.

나는 아직도 무슨 일이 벌어지고 있는지 전혀 모른다. 모든 사람들의 제안에 감사드립니다.

1

numbertheNumber 등 다른 무언가를, 속성 이름 시도 . reserved words in Core Data attributes 몇 가지가 있으며 문서화되지 않은 알 수없는 번호 (의도적 인 말장난 없음)가 있습니다. 다른 번호로 비틀 거릴 수도 있습니다.

+0

변경되었지만 작동하지 않았습니다. 그래도 고마워. – tazboy

+0

'버전 추가'메뉴를 통해 여러 버전의 데이터 모델을 보유하고 있습니까? 그렇다면 잘못된 버전을 '현재 버전'으로 선택했을 수도 있습니다. – RyanR

+0

처음에는 당신이 옳았다 고 생각했지만 변경된 버전 옆에 체크 표시가있어서 현재 버전입니다. 또한 이전 버전에는 내 그룹의 '주문'속성이 없으며 체크 표시가되어 있으며 주문을 설정하고 인쇄 할 수 있습니다. 젠장, 내가 그랬 으면 좋겠다. – tazboy

2

디버거에서 개체를 인쇄하면 컨텍스트에서 보유하는 NSManagedObject 하위 클래스인지 일반 바닐라 사용자 지정 클래스인지에 관계없이 클래스에 정의 된 모든 속성을 제공해야합니다. 디버거 출력물에는 number 속성이 누락되어 있지 않고 image 속성도 누락되어 있습니다.

실제로 발생할 수있는 유일한 방법은 새 버전의 클래스 파일을 대상에 추가하지 않았지만 실제로 새 속성이없는 이전 버전을 사용하는 경우입니다.

이전 파일의 대상을 확인하거나 새 버전이 빌드 ​​대상에 제대로 추가되었는지 확인하십시오.

+0

+1 우수한 포인트 다시 : 파일에 대한 대상을 확인하십시오. XCode의 가장 강력하고 사용자 친화적 인 기능 중 하나입니다. – RyanR

+0

이게 당신이 말하는 것인지는 확실하지 않지만 Pick -> Build Phases 탭 -> Compile Sources 드롭 다운이라는 내 타겟에 가서 Pick.xcdatamodeld가 있고 Pick.xcdatamodel이있는 것을 보았습니다. 거기에 내 새로운 버전을 선택하지 2.xcdatamodel. 이것이 문제가 될 수 있습니다. 그렇다면 어떻게 수정해야합니까? – tazboy

+0

"-"버튼으로 이전 버전을 제거하고 "+"와 함께 새 버전을 추가하십시오. 여기서 소스로 컴파일 된 파일을 사용자 정의 할 수 있습니다. 일반적으로 이것은 Xcode에 의해 자동으로 설정되고 유지되지만 주위를 둘러싼 많은 것들을 바꿀 때 혼란 스러울 수 있습니다. BTW,'Pick 2.xcdatamodel'에 공간이 있습니까? 그렇다면, 단지 밑줄 문자로 바꾸고 싶을 수도 있습니다. – TechZen

관련 문제