вмъкнатият тип не съвпада в NSMutableArray

Изправен съм пред много странен проблем. Опитвам се да разбера какво се случва. Просто казано, опитвах се да вмъкна NSInteger в NSMutableArray. ключове е NSMutableArray. ключът е от тип NSInteger.

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

В конзолата xcode. Виждам key=(NSInteger) -1. така че типът е NSInteger и стойността е -1. Въпреки това, когато стартирам горните кодове и проверявам какво има в ключовете. Показва (_NSCFNumber *) дълго 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 е вече подписан. 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