Координирует все неправильно на iPhone 3G? Это может быть ваш компилятор
Примечание: Это вопрос, на который я уже нашел ответ. Кажется, что вопрос после поиска интересного ответа рекомендуется, поэтому я публикую это. У кого-то еще, вероятно, будет такая же проблема и найти это полезным.
У меня есть приложение iOS, которое создает диаграммы. Вскоре после публикации обновления пользователь отправил мне эту паническую электронную почту:
"последнее обновление изменило кривые... не видно больше роста кривые и вставленные данные представлены в виде нисходящей линии... прежде чем вы сможете прекрасно видеть
Помогите мне"
Я заставлю его отправить скриншот и дать более подробную информацию. У него iPhone 3G, и именно так выглядит диаграмма. Большинство точек рисуются в неправильных координатах: они, как представляется, рисуются в (x, x) вместо (x, y).
![Screenshot of the buggy display]()
Сравните с тем, как это должно выглядеть (игнорируйте разницу в цветах - розовый для девочек, синий для мальчиков):
![Screenshot of a correct display]()
После долгих экспериментов я отправил ему переработанную версию предыдущей версии (которая работала нормально для него), и она все еще не работает. Поэтому, в конце концов, кажется, что изменения кода в обновлении не имеют к этому никакого отношения. Что может быть объяснением?
Ответы
Ответ 1
Оригинальный iPhone и iPhone 3G используют архитектуру armv6, позже модели armv7. Ответ на этот вопрос о переполнении стека и тема форума разработчиков Apple. проблема в коде armv6 Thumb, созданная компилятором XCode 4.2, который выдает арифметические операции над определенными структурами данных, в частности CGPoint
, чтобы вернуть совершенно неправильные результаты. Например, значение x записывается в значение y.
Решение заключается в добавлении опции компилятора -mno-thumb
в проект XCode. Это говорит компилятору не генерировать код режима Thumb, тем самым минуя ошибку. Другим решением является переход на более ранний XCode (pre-iOS5 SDK), который не имеет этой ошибки.
Итак, ошибка в компиляторе ! Как это круто?:) В течение двух десятилетий развития я еще не сталкивался с такой ситуацией.
Вот скриншот, показывающий, где добавить этот параметр компилятора, если он кому-то поможет:
![enter image description here]()