метод-обертка в расширенном классе NSManagedObject - PullRequest
1 голос
/ 08 июля 2011

Я использую CoreData в приложении для iOS. Все работает отлично, за исключением полей, помеченных как Boolean в xcdatamodel, которые моделируются, и NSNumber. Для таких полей я хочу написать какой-нибудь вспомогательный метод в расширенном классе, но мне было интересно, где лучше всего их написать или как лучше.

В MyManagedObject.h у меня есть:

@interface MyManagedObject : NSManagedObject {
@private
}
@property (nonatomic, retain) NSNumber * mandatory;
@end

Где обязательно - логическое значение в модели данных. Это сгенерированный класс из xcode:

@implementation MyManagedObject
@dynamic mandatory;

На данный момент, для правильного использования сущности мне нужно написать где-нибудь некоторые служебные методы-обертки, возможно, в самой сущности, такие как:

[myManagedObject mandatoryWrapper:YES];


-(void)mandatoryWrapper:(BOOL)mandatory {
    // convert boolean to number
    self.mandatory=convertedMandatory;
}

Но я намерен использовать оригинальный метод получения / установки, чтобы не создавать «путаницу»:

// setter
myManagedObject.mandatory=YES;
//getter
if(myManagedObject.isMandatory)

но я полагаю, что переписывание исходных методов позже вызовет некоторые проблемы в жизненном цикле приложения, например, при сохранении или извлечении в контексте.

спасибо.

1 Ответ

0 голосов
/ 10 июля 2011

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

В вашем случае вам понадобится что-то вроде:

@property BOOL isMandatory;

-(BOOL) isMandatory{
   return [self.mandatory boolValue];
}

-(void) setIsMandatory:(BOOL) boolVal{
  self.mandatory=[NSNumber numberWithBool:boolVal];
}

Это позволит вам использовать конструкции удобства, такие как:

If (self.isMandtaory)...
self.isMandatory=YES;

Базовые данные счастливы, потому что объект моделируетсяСвойство NSNumber все еще там и работает, как и ожидалось, но человек может использовать более легкую для понимания булеву версию.

...