Получение элемента коллекции типа int не является объективным объектом c в iOS
У меня есть следующий словарь:
NSDictionary* jsonDict = @{
@"firstName": txtFirstName.text,
@"lastName": txtLastName.text,
@"email": txtEmailAddress.text,
@"password": txtPassword.text,
@"imageUrl": imageUrl,
@"facebookId": [fbId integerValue],
};
В последнем элементе мне нужно использовать целое число, но я получаю ошибку:
collection element of type int is not an objective c object
Как я могу использовать значение int в этом элементе?
Ответы
Ответ 1
должен быть:
@"facebookId": [NSNumber numberWithInt:[fbId intValue]];
NSDictionary
работает только с объектами, и в результате мы не можем просто хранить int
или integer
или bool
или любые другие примитивные типы данных.
[fbId integerValue]
возвращает примитивное целочисленное значение (которое не является объектом)
Следовательно, нам нужно инкапсулировать примитивные типы данных и превратить их в объекты. поэтому нам нужно использовать класс, подобный NSNumber
, чтобы сделать объект просто для хранения этого дерьма.
more reading: http://rypress.com/tutorials/objective-c/data-types/nsnumber.html
Ответ 2
ИЛИ, если fbID является NSString
,
@"facebookId": @([fbId intValue]);
его как автобоксинг в Java. @преобразует любое примитивное число в объект NSNumber.
Ответ 3
Предполагая, что fbID является int
, тогда он должен выглядеть следующим образом:
@"facebookId": @(fbId)
Ответ 4
NSDictionary может содержать только объекты (например, NSString, NSNumber, NSArray и т.д.), а не примитивные значения (например, int, float, double и т.д.). То же самое касается почти всех инкапсуляций в Objective-C. Чтобы сохранить номера, используйте NSNumber:
NSDictionary *dictionary = @{@"key" : [NSNumber numberWithInt:integerValue]]};
Ответ 5
В итоге я использовал NSNumber
:
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:fbId];
[f release];