За исключением привязок Какао, я не могу вспомнить многих других мест, где есть автобокс скалярных типов в Какао или Какао, так что, к сожалению, вам не повезло.
Вы на самом деле не такполучить что-нибудь, работая с NSNumbers в вычислениях, поэтому работа с объектами там на самом деле не нужна.Гораздо проще работать со скалярными типами, а затем преобразовывать туда и обратно между номерами NSN при сохранении этих чисел в базовых данных, массивах и т. Д. Единственный случай, когда вы захотите остаться в этой форме, - это NSDecimalNumbers, которые не представляютчисла являются стандартными значениями с плавающей запятой и, таким образом, избегают сбоев, которые вы видите при попытке работать с десятичными числами в этих типах.
Базовые данные хранят объекты, поэтому вы не сможете обойти это на базовом уровне, но вы можете немного упростить свою жизнь, используя собственные методы доступа в подклассах NSManagedObject, которые принимают и возвращают скалярные значения.Apple имеет пример этого в разделе « Методы доступа к управляемым объектам » Руководства по программированию основных данных, где они показывают, как настроить метод доступа для значения CGFloat вместо использования NSNumber:
@interface Circle : NSManagedObject
{
CGFloat radius;
}
@property CGFloat radius;
@end
@implementation Circle
- (CGFloat)radius
{
[self willAccessValueForKey:@"radius"];
float f = radius;
[self didAccessValueForKey:@"radius"];
return f;
}
- (void)setRadius:(CGFloat)newRadius
{
[self willChangeValueForKey:@"radius"];
radius = newRadius;
[self didChangeValueForKey:@"radius"];
}
@end
В качестве примечания, использование синтаксиса точек для -intValue
и -boolValue
, хотя и работает, не рекомендуется.Это не свойства, а односторонние методы, которые извлекают значения из NSNumbers.При работе с ними используйте скобки, чтобы это было понятно в вашем коде.