Сбой при манипулировании простым объектом Core Data - PullRequest
1 голос
/ 07 августа 2010

Я углубляюсь в разработку iOS и у меня есть несколько вопросов по поводу манипулирования простым объектом Core Data, который я создал в Xcode. После использования редактора объектов вот класс, сгенерированный для меня Xcode ...

@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

Вот фрагмент кода, в котором я пытаюсь создать объект Alarm, который планирую добавить в свой ManagedObjectContext ...

- (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

что мне здесь не хватает?

Заранее большое спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 07 августа 2010

Я хотел бы изучить использование mogenerator:

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

Командная строка для его запуска:

mogenerator -m MyAwesomeApp.xcdatamodel -O Classes

В какую бы директорию вы не поместили после -O, куда идут созданные классы. Самое замечательное в том, что он имеет более простые методы для создания новых объектов управления в контексте, а также создает класс, который можно настроить (добавляя свои собственные методы), который не удаляется даже при регенерации объектов из модели.

Гораздо проще, чем с помощью генерации объекта XCode.

2 голосов
/ 07 августа 2010

Вы не должны выделять и инициировать объект на основе NSManagedObject напрямую. Вы должны использовать

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

Это может быть причиной того, что это не сработает. Потому что обычно довольно просто заставить его работать.

В документации сказано:

Если вы создаете экземпляр управляемого объекта напрямую, вы должны позвонить назначенному инициализатор (InitWithEntity: insertIntoManagedObjectContext:)

.

И в initWithEntity: insertIntoManagedObjectContext: документация:

Внимание: этот метод назначенный инициализатор для NSManagedObject. Ты не должен инициализировать управляемый объект просто отправив его init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...