Хранить NSInteger в основных данных - PullRequest
0 голосов
/ 12 августа 2011

Можно ли как-нибудь пропустить работу с NSNumber и работать напрямую с NSInteger?

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Базовые данные разрешают только номера NSN.Однако вы можете написать собственные методы получения и установки для использования свойств NSInteger. mogenerator - замечательный инструмент, который делает это автоматически для вас: он генерирует классы с нативными свойствами для всех ваших сущностей.

2 голосов
/ 12 августа 2011

Нет. NSInteger - это просто определение типа для длинного целого, а не объекта.

Фактическая реализация:

#if __LP64__ || NS_BUILD_32_LIKE_64
  typedef long NSInteger;
  typedef unsigned long NSUInteger;
#else
  typedef int NSInteger;
  typedef unsigned int NSUInteger;
#endif

Класс NSNumber позволяет инкапсулировать примитивные типы (int, float и т. Д.) В объект, который затем может быть сохранен в списках свойств и базовых данных.

Пример:

float pi = 3.1415;
NSNumber *piNumber = [NSNumber numberWithFloat:pi];

После этого вы можете легко получить доступ и / или преобразовать сохраненное значение в объект NSNumber:

int piAsInteger = [piNumber intValue];
...