вставленный тип не соответствует в NSmutableArray

Я столкнулся с очень странной проблемой. Я пытаюсь понять, что происходит. Проще говоря, я пытался вставить NSInteger в NSMutableArray. keys — это NSmutableArray. ключ имеет тип NSInteger.

[keys insertObject: [NSNumber numberWithInteger: key] atIndex:insPoint];

В консоли xcode. Я вижу ключ = (NSInteger) -1. поэтому тип - NSInteger, а значение -1. Однако, когда я запускаю приведенные выше коды и проверяю, что находится в ключах. Он показывает (_NSCFNumber *) long 7205759403792935. Если я изменил код на

[keys insertObject: [NSNumber numberWithInt: key] atIndex:insPoint];

Он правильно показывает (_NSCFNumber *) int -1. Я также пробовал NSLog с numberWithInt и numberWithInteger.

NSLog(@"%@",[NSNumber numberWithInteger: key]);
NSLog(@"%@",[NSNumber numberWithInt: key]);

Все они показывают -1. я тоже пробовал

NSInteger a=-2;
[keys insertObject: [NSNumber numberWithInteger: a] atIndex:insPoint];
#also have some wierd number, but it works for positive number 

В чем проблема? Какие-либо предложения?


person Seawind Shi    schedule 21.11.2014    source источник
comment
какой проводной номер? В настоящее время все номера поставляются со встроенным Wi-Fi ... в любом случае - знаковое и незнаковое представление является ключевым.   -  person The Paramagnetic Croissant    schedule 21.11.2014
comment
Это американское слово, означающее странный.   -  person    schedule 21.11.2014
comment
Не могли бы вы написать свой пример кода как есть, я не могу понять сценарий.   -  person Jageen    schedule 21.11.2014
comment
Я хотел бы подчеркнуть, что проблема возникает, как только объект NSNumber был вставлен в массив. Например. NSLog OP дает правильный результат для объекта, который не был сохранен в массиве. Проблема не может быть подписана, потому что NSInteger is уже подписан. NSUInteger не имеет знака. В массив вставляется подписанный NSInteger -1, и насколько я понимаю, он неправильно читается, при сбросе содержимого массива в консоль.   -  person    schedule 21.11.2014


Ответы (1)


7205759403792935 больше 32 бит. Значение равно -1 как 56-битное целое число.

person Community    schedule 21.11.2014
comment
Чтобы помочь вам найти решение, я хотел бы попросить дополнительную информацию... 1: Для какой архитектуры вы строите (ARM, Intel или PowerPC)? 2: Вам нужна 32-битная или 64-битная точность? 3: Попробуйте NSLog(@"%s", [[keys objectAtIndex:insPoint] objCType]); - person ; 23.11.2014