Получение элемента коллекции типа int не является объективным объектом c в iOS - программирование
Подтвердить что ты не робот

Получение элемента коллекции типа 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 в этом элементе?

4b9b3361

Ответ 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];