2010-08-07 4 views
1

저는 iOS 개발에 뛰어 들고 있으며 Xcode에서 생성 한 간단한 Core Data 객체를 조작하는 방법에 대해 몇 가지 질문이 있습니다. 오브젝트 편집기를 사용 후, 여기에 엑스 코드 나를 위해 생성 된 클래스 ... 여기 간단한 Core Data 객체를 조작 할 때 크래시가 발생합니다.

@interface Alarm : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSNumber * Enabled; 
@property (nonatomic, retain) NSString * Label; 
@property (nonatomic, retain) NSNumber * Snooze; 

@end 

@implementation Alarm 

@dynamic Enabled; 
@dynamic Label; 
@dynamic Snooze; 

@end 

내가 노력하고 내가 내 ManagedObjectContext에 추가 할 계획 Alarm 개체를 만드는 곳 냈다 코드의은 ...입니다

다음과 같은 충돌 메시지와
- (void)saveAlarm:(id)sender { 

    Alarm *alarm = [[Alarm alloc] init]; 

    alarm.Label = [NSString stringWithString:txtLabel.text];  
    alarm.Snooze = [NSNumber numberWithBool:switchSnooze.on]; 
    alarm.Enabled = [NSNumber numberWithBool:YES]; 

    [addAlarmDelegate insertNewAlarm:alarm]; 
    [alarm release]; 
} 

내 코드는 내가 시도하고 라인에서, 알람의 속성 중 하나에 값을 할당 처음 충돌 ...

alarm.Label = [NSString stringWithString:txtLabel.text]; 

콘솔 ...

reason: '-[Alarm setLabel:]: unrecognized selector sent to instance 0x5e33640 

나는 무엇을 여기에서 놓치고 있냐?

미리 도움 주셔서 감사합니다.

+0

일반적인 스타일 포인트로서, 나는 당신의 속성을 대문자로하지 않을 것입니다 ... – jtbandes

+0

xcode는 그들을 생성 할 때 대문자로 표시합니다. – BeachRunnerFred

+1

의심되는 엔티티에 대문자가 있기 때문에 Xcode가 대문자로 표기했습니다. 당신은 그것을 피해야합니다. –

답변

2

NSManagedObject 기반 개체를 직접 할당하고 초기화하지 마십시오. 당신이 사용해야합니다

[NSEntityDescription insertNewObjectForEntityForName:@"Alarm" inManagedObjectContext:moc]; 

그것은 그것이 작동하지 않는 이유 일 수 있습니다. 일반적으로 작동시키기에 꽤 정직하기 때문에.

문서는 말한다 : insertIntoManagedObjectContext :) : 당신이 직접 관리되는 개체 를 인스턴스화하는 경우

, 당신은 지정 초기화 (initWithEntity를 호출해야합니다. insertIntoManagedObjectContext :

그리고 initWithEntity에서

의 문서 :

중요 :이 방법은 NSManagedObject의 지정 초기화입니다. 관리 객체를 초기화하려면 init을 보내면됩니다. 그것을 실행하는

http://rentzsch.github.com/mogenerator/

명령 줄은 다음과 같습니다 :

+0

대신 실제로는 + [NSEntityDescription insertEntityForName : inManagedObjectContext :]'를 사용해야합니다. '-init ... '메소드를 직접 사용할 필요는 없다. –

4

나는 mogenerator을 사용으로 보일 것이다

mogenerator -m MyAwesomeApp.xcdatamodel -O Classes 
생성 된 클래스가 갈 곳을 -O 후 넣어 무엇이든 디렉토리

입니다 . 가장 좋은 점은 컨텍스트에서 새 관리 객체를 만드는 더 간단한 방법을 제공하고 모델에서 객체를 다시 생성하더라도 제거되지 않는 사용자 정의 (사용자 고유의 메서드 추가) 할 수있는 클래스를 생성한다는 것입니다.

XCode 개체 생성을 사용하는 것보다 훨씬 간단합니다.

+2

누가 이것을 스팸으로 표시했는지는 모 기어레이터가 무엇인지 모릅니다. 이는 핵심 데이터 엔티티에 해당하는 코드를 자동 생성하는 것과 완벽하게 관련된 제안입니다. –

관련 문제