Координаты все неправильно на iPhone 3G? Это может быть ваш компилятор - PullRequest
12 голосов
/ 06 декабря 2011

Примечание: Это вопрос, на который я уже нашел ответ. Кажется, что публикация вопроса после нахождения интересного ответа приветствуется , поэтому я публикую это. У кого-то еще может быть такая же проблема, и он сочтет это полезным.


У меня есть приложение для iOS, которое создает графики. Вскоре после публикации обновления пользователь отправил мне паническое электронное письмо:

"последнее обновление изменило кривые ... не видно больше роста кривые и вставленные данные представлены в виде нисходящей линии ... прежде чем вы могли прекрасно видеть

Помоги мне "

Я заставляю его прислать скриншот и дать более подробную информацию. У него есть iPhone 3G, и вот как выглядит график девушки. Большинство точек нарисованы с неправильными координатами: они отображаются на (x, x) вместо (x, y).

Screenshot of the buggy display

Сравните с тем, как это должно выглядеть (игнорируйте разницу в цветах - розовый для девочек, синий для мальчиков):

Screenshot of a correct display

После долгих экспериментов я отправил ему восстановленную версию предыдущей версии (которая работала для него нормально), и она все еще не работает. Таким образом, в конце концов оказывается, что изменения кода в обновлении не имеют к этому никакого отношения. Что может быть объяснением?

1 Ответ

10 голосов
/ 06 декабря 2011

iPhone оригинал и iPhone 3G используют архитектуру armv6, более поздние модели armv7.Ответ на этот вопрос о переполнении стека и ветка форума разработчиков Apple указывают на проблему с кодом Thumb armv6, созданным компилятором XCode 4.2, который вызывает арифметические операции с некоторыми структурами данныхв частности CGPoint, чтобы вернуть совершенно неверные результаты.Например, значение x записывается в значение y.

Решение состоит в том, чтобы добавить опцию компилятора -mno-thumb в проект XCode.Это говорит компилятору не испускать код режима Thumb, тем самым обходя ошибку.Другое решение состоит в том, чтобы вернуться к более раннему XCode (до iOS5 SDK), в котором нет этой ошибки.

Так что ошибка в компиляторе !Как это круто?:) За два десятилетия разработки мне еще не приходилось сталкиваться с такой вещью.

Вот скриншот, показывающий, куда добавить эту опцию компилятора, если она кому-нибудь поможет:

enter image description here

...