Я только что запустил этот код в CodeRunner
size_t shortSize = sizeof(short);
size_t intSize = sizeof(int);
short short123000 = 123000;
int int123000 = 123000;
NSString *format = @"\nshortSize => %d\n"
@"int Size => %d\n"
@"short with 123000 => %d\n"
@"int with 123000 => %d";
NSLog(format, shortSize, intSize, short123000, int123000);
, что приводит к:
shortSize => 2
int Size => 4
short with 123000 => -8072
int with 123000 => 123000
NB Размер в байтах и 8 биттаким образом, в байте 2 * 8 = 16 бит и 4 * 8 = 32 бит.
У меня были похожие проблемы с некоторыми приложениями, над которыми я работаю.Похоже, что CoreData стал более строгим в отношении принудительного применения его типов.Я был пойман на это, но мне следовало быть более бдительным в отношении того, что я делал, если бы Apple изменила свой API, чтобы он не вел себя так, как предполагалось, что люди будут жаловаться, но когда API меняется, чтобы делать то, что он делаетВо-первых, это просто неудачно и может привлечь людей.
Как видите, это простое целочисленное переполнение, поэтому, если вы знаете диапазон, в котором вы работаете, вы можете легко это исправить.