Измените NSSet NSNumber на NSSet типа int - PullRequest
1 голос
/ 11 марта 2010

Я использую данные с основными данными и получаю NSSet NSNumber ... мой вопрос: как я могу легко изменить все объекты в значения int? или я могу напрямую получить значения int из базы данных?

Спасибо

Ответы [ 3 ]

7 голосов
/ 11 марта 2010

NSSet не может хранить примитивные значения, такие как int, поэтому используется NSNumber. Часто вы можете просто использовать NSNumber, не делая каста. Если вам нужно значение int, позвоните [mynumber intValue].

2 голосов
/ 11 марта 2010

Это не отвечает на ваш вопрос, но оно связано и безумно полезно.

Допустим, у меня есть коллекция (NSArray, NSSet и т. Д.) Объектов определенного типа, и у этих объектов есть метод / свойство, называемое displayValue, которое каким-то образом превращает объект в более удобный формат для отображения. Чтобы преобразовать мою коллекцию объектов в коллекцию их displayValues, мне нужно только сделать:

NSArray * objects = ...;
NSArray * objectDisplayValues = [objects valueForKey:@"displayValue"];

Единственное предостережение в том, что если displayValue возвращает примитив (int, float, структуру и т. Д.), Он будет помещен в соответствующий контейнер NSValue.

Так что теоретически вы могли бы сделать:

NSArray * numbers = ...;
NSArray * intValues = [numbers valueForKey:@"intValue"];

Но поскольку intValue будет помещен в NSNumber, вы вернетесь туда, откуда начали.

Как я уже сказал, это не совсем ответ, но он очень полезен.

1 голос
/ 11 марта 2010

Сохранить NSSet как есть.

Вы можете легко получить значения типа NSNumber.

int intValue = [myNSNumber intValue];
...