Хотя ответ Дейва Делонга близок, вы можете сделать это, не меняя название свойства.
Вы можете изменить свойство, чтобы вернуть BOOL
, но затем вам нужно написать методы доступа вручную, и они немного отличаются от того, что Дейв имеет в своем ответе.
Сначала ваш @property
должен быть определен как:
@property (nonatomic, getter=isCurrentlyForSale) BOOL currentlyForSale;
Затем в файле реализации вместо объявления свойства @dynamic
создайте методы доступа напрямую.
- (BOOL)isCurrentlyForSale
{
[self willAccessValueForKey:@"currentlyForSale"];
BOOL b = [[self primitiveValueForKey:@"currentlyForSale"] boolValue];
[self didAccessValueForKey:@"currentlyForSale"];
return b;
}
- (void)setCurrentlyForSale:(BOOL)b
{
[self willChangeValueForKey:@"currentlyForSale"];
[self setPrimitiveValue:[NSNumber numberWithBool:b] forKey:@"currentlyForSale"];
[self didChangeValueForKey:@"currentlyForSale"];
}
С помощью этих методов доступа ваш объект будет обрабатывать бокс для вас, и вы сможете получить к нему доступ в качестве примитивного значения. Кроме того, сеттер, начинающийся с setIs
, не очень хорошая идея, поэтому его удаление в примере кода.