2011-12-05 12 views
12

Nota: Esta es una pregunta a la que ya he encontrado una respuesta. Parece que publicar una pregunta después de encontrar una respuesta interesante is encouraged, entonces estoy publicando esto. Es probable que otra persona tenga el mismo problema y lo encuentre útil.¿Coordenadas todo mal en iPhone 3G? Podría ser su compilador


Tengo una aplicación para iOS que produce gráficos. Poco después de publicar una actualización, un usuario me ha enviado este mensaje de pánico:

"la última actualización ha modificado las curvas ... no se ve más el crecimiento curvas y los datos insertados se representan como una línea descendente ... antes de que se podía ver perfectamente bien

Ayúdame"

consigo que le envíe una captura de pantalla y dar más detalles. Él tiene un iPhone 3G y así es como se ve el cuadro de las chicas. La mayoría de los puntos se dibujan en las coordenadas incorrectas: parecen dibujarse en (x, x) en lugar de (x, y).

Screenshot of the buggy display

Comparar con cómo se supone que se vea (ignorar la diferencia de colores - rosa es para niñas, azul para los niños):

Screenshot of a correct display

Después de mucha experimentación, que envío él una versión reconstruida de la versión anterior (que funcionó bien para él) y todavía no funciona. Entonces, al final, parece que los cambios de código en la actualización no tienen nada que ver con eso. ¿Cuál podría ser la explicación?

+1

Tal vez está escribiendo en este momento. – sidyll

Respuesta

10

iPhone original y iPhone 3G utilizan la arquitectura armv6, modelos posteriores armv7. Una respuesta a this Stack Overflow question y an Apple developer forum thread apuntan a un problema en el código armv6 Thumb producido por el compilador de XCode 4.2 que causa operaciones aritméticas en ciertas estructuras de datos, en particular CGPoint, para devolver resultados completamente incorrectos. Tal como el valor x que se escribe en el valor y.

La solución es agregar la opción del compilador -mno-thumb al proyecto XCode. Esto le dice al compilador que no emita el código del modo Thumb, omitiendo así el error. Otra solución es volver a un XCode anterior (SDK anterior a iOS5), que no tiene este error.

El error está en el compilador ! ¿Cuan genial es eso? :) En dos décadas de desarrollo, aún no me había encontrado con tal cosa.

Aquí hay una captura de pantalla que muestra dónde para añadir esta opción del compilador si ayuda a nadie:

enter image description here

Cuestiones relacionadas