Я бы не рекомендовал метод, предложенный Diederik Hoogenboom (я получил ошибку, хотя мой базовый атрибут данных был установлен как Boolean).
Стоит отметить, что хотя эта строка будет работать для пользовательского объекта, она не будет работать для подкласса NSManagedObject:
@property (nonatomic) BOOL booleanProperty;
Ваша собственность должна быть установлена следующим образом:
@property (nonatomic, retain) NSNumber *booleanProperty;
Когда я копирую объявления методов для логического типа (используя технику, предложенную Джимом Коррейа), геттер и сеттер печатаются как:
NSNumber:-(NSNumber *)booleanProperty;
-(void)setBooleanProperty:(NSNumber *)value;
... это то, что задано логическое свойство в основных данных, и вам нужно проверить свое свойство примерно так:
-(BOOL)validateBooleanProperty:(NSNumber **)toValidate error:(NSError **)outError
{
int toVal = [*toValidate intValue];
if ( (toVal < 0) || (toVal > 1) )
{
NSString *errorString = NSLocalizedStringFromTable(@"Boolean Property", @"TheObject", @"validation: not YES or NO");
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorString forKey:NSLocalizedDescriptionKey];
NSError *error = [[[NSError alloc] initWithDomain:NSCocoaErrorDomain code:-1 userInfo:userInfoDict] autorelease];
*outError = error;
return NO;
}
return YES;
}//END
… не забудьте включить объявление validateBooleanProperty в заголовочный файл. Методы setter и getter хранят и извлекают ваше свойство с помощью ключа - (id) primitiveValueForKey: (NSString *).
Наконец, вам нужно явно вызвать метод validate из любого контроллера представления / приложения, для которого вы устанавливаете объект:
NSNumber *boolProp = [[[NSNumber alloc] initWithInt :0] autorelease];
NSError *valError = nil;
if ([TheObject validateBooleanProperty:&boolProp error:&valError] == YES)
{
[TheObject setBooleanProperty :boolProp];
}