Итак, в марте прошлого года я отправил приложение для iPad в магазин приложений.Он содержит модель базовых данных с предварительно заполненным хранилищем данных двоичного дерева.Я написал крошечное 64-разрядное приложение OSX для преобразования и извлечения данных из произвольной 200-мегабайтной базы данных SQLite в свою собственную модель базовых данных, что привело к созданию аккуратного постоянного хранилища SQLite размером 20 МБ.Все денди, переведено в систему управления версиями и никогда не оглядывалось назад.
Теперь у моего клиента есть обновленная база данных, и он также хочет отправить обновленное приложение.Я подумал, что это не займет больше, чем снова запустить конвертер и переиздать в iTunesConnect, но нет.Мой конвертер не запустится или не выведет нужный магазин.Я потратил часы и часы, пытаясь выяснить, в чем дело, прежде чем, наконец, все вернуть назад, когда я первоначально отправил свое приложение в магазин, и угадать, что конвертер даже не конвертирует.Тот же код, та же входная база данных, все то же самое!
Просматривая некоторые данные, к которым привело мое приложение, я обнаружил странное несоответствие в том, как некоторые значения хранятся в модели Core Data.В этих трех строках групповой объект является сущностью Core Data.Свойство идентификатора имеет тип Integer 16
, как и все мои целочисленные значения в модели.Достаточно забавно, когда я смотрю на значения после этих трех строк:
int identifier = 39899;
NSNumber *numIdentifier = [NSNumber numberWithInt:identifier];
group.identifier = numIdentifier;
Я получаю эти три значения:
identifier: 39899
numIdentifier: 39899
group.identifier: -25637
Ошибка, что?Число, разумеется, будет получено из исходной базы данных, но даже при вставке его вручную последнее свойство основного объекта данных искажается.Почему эта последняя строка отличается?Отрицательный что?Конечно, значение даже близко не приближается к INT_MAX, почему это выглядит так, как будто оно оборачивает подписанное int?И почему теперь все по-другому, когда в марте с тем же кодом и той же входной базой данных он работал нормально?Единственное, что я могу вспомнить, изменившись с тех пор, это обновление до OSX Lion.Но, конечно, это не могло повлиять на это, верно?
Кто-нибудь знает, что я делаю неправильно, что я, возможно, делал неправильно в прошлом марте, и как я могу исправить этот беспорядок?