2013-03-29 4 views
1

하나의 엔티티와 2 개의 속성으로 CoreData를 사용하고 있습니다.
엔티티 : 바인더
속성 : 이름,
, BR> 나는 문제없이 기업의 새로운 객체를 삽입 할 수있어 을 lastOpened, 나는 또한 이름,하지만 나는 그것이 lastOpened 속성의 설정할 수 없습니다 설정할 수 있습니다. 나는 응용 프로그램을 실행할 때
CoreData - insertNewObjectForEntityForName이 속성을 설정할 수 없습니다.

Binder *newBinder = [NSEntityDescription insertNewObjectForEntityForName:@"Binder" inManagedObjectContext:context]; 
[newBinder setName:@"Binder"]; 
[newBinder setLastOpened:[NSDate date]]; //Tried this first 
newBinder.lastOpened = [NSDate date]; //No compiler warning either 

그러나, 나는 도시 한 메모리 주소가 실제로 올바른 바인더 객체 있는지 확인할 수 있습니다 -[Binder setLastOpened:]: unrecognized selector sent to instance 0x9688870

의 오류 :
다음은 내 코드입니다. 왜 하나의 속성을 설정할 수 있지만 다른 속성은 설정할 수 없는지에 대한 아이디어는 있습니까? 감사.
Binder.h :

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

@class Cards; 

@interface Binder : NSManagedObject 

@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSDate * lastOpened; 
@property (nonatomic, retain) NSSet *cards; 
@end 

@interface Binder (CoreDataGeneratedAccessors) 

- (void)addCardsObject:(Cards *)value; 
- (void)removeCardsObject:(Cards *)value; 
- (void)addCards:(NSSet *)values; 
- (void)removeCards:(NSSet *)values; 

@end 

Binder.m : 당신은 할 수 있습니다

#import "Binder.h" 
#import "Cards.h" 


@implementation Binder 

@dynamic name; 
@dynamic lastOpened; 
@dynamic cards; 

@end 
+0

귀하의 모델에는 'lastOpened'와 같은 속성이없는 것으로 보입니다. 관리 대상 개체 모델을 인쇄하고 확인하십시오. –

답변

1

엑스 코드 가끔 ​​xcdatamodel에 대한 변경을 재건까지 goofs. 다음 번에 깨끗한 빌드를 시도하십시오.

또한 리팩터링을 중단하므로 class-name 문자열을 하드 코어해서는 안됩니다.

[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Binder class]) inManagedObjectContext:context] 

또한 클래스 이름과 관리 객체에 접두사를 추가하십시오. (예 : XYZBinder를 바인더로 선호). 미래의 네임 스페이스 충돌에 대한 슬픔을 피할 수 있습니다.

+0

Lorean 덕분에 정말 도움이되었습니다. 하지만 앱을 다시 빌드 할 때마다 이제는 깨끗한 빌드를해야합니다. 어떻게하면 그걸 영구히 고칠 수 있을까? –

0

이미 프로젝트에 바인더라는 이름의 또 다른 클래스를로드. Xcode에서 CoreData 엔티티의 클래스 이름을 BinderMO와 같은 것으로 설정하고 클래스 파일을 다시 작성하십시오.

0

문제가 무엇인지 모르겠지만 Binder.h/.m 파일을 삭제하고 다시 작성하여 작동합니다. 이전 버전과 새로운 버전의 유일한 차이점은 '이름'과 'lastOpened'가 서로 바뀌 었음을 의미합니다. 도와 주셔서 감사합니다.

새로운 Binder.h :

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

@class Cards; 

@interface Binder : NSManagedObject 

@property (nonatomic, retain) NSDate * lastOpened; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSSet *cards; 
@end 

@interface Binder (CoreDataGeneratedAccessors) 

- (void)addCardsObject:(Cards *)value; 
- (void)removeCardsObject:(Cards *)value; 
- (void)addCards:(NSSet *)values; 
- (void)removeCards:(NSSet *)values; 

@end 

새로운 Binder.m :

#import "Binder.h" 
#import "Cards.h" 


@implementation Binder 

@dynamic lastOpened; 
@dynamic name; 
@dynamic cards; 

@end 
관련 문제