2012-01-01 3 views
3

私は1 CGRectの属性を変更しようとしているいくつかのコードを持っており、この新しいフレームで別のCGRectを設定します。デバッグビルドとリリースが新しいiPhoneのためのビルドにiOSのデバッグ/リリース間の精度の違いによって、表示が乱れてしまいますか?

actView   = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray ] autorelease]; 
actView.hidesWhenStopped = NO; 
[actView startAnimating]; 
frame   = actView.frame; 
frame.origin.x = mainLabel.frame.origin.x - frame.size.width - TBLCELLPADDING; 
frame.origin.y = mainLabel.frame.origin.y; 
actView.tag  = TBLCELLACTTAG; 
actView.frame = frame; 
[cell.contentView addSubview:actView]; 

これが正常に動作します。しかし、3G iPhone用のリリースビルドで実行すると、いくつかの狂った結果が生成され、ビューが混乱する。

期待される成果(新しい携帯電話で動作します):リリースビルドで4.2のファームウェアを実行しているiPhone 3G(これは任意のファームウェア上で起こる)のための

2012-01-01 14:41:43:449 myapp [691:775] Loading MainLabel: 122.000000 26.000000 
2012-01-01 14:41:43:605 myapp[691:775] Loading Frame: 97.000000 26.000000 
2012-01-01 14:41:43:713 myapp[691:775] Loading ActView: 97.000000 26.000000 

結果:

2012-01-01 14:43:39:516 myapp[706:775] Loading MainLabel: 122.000000 26.000000 
2012-01-01 14:43:39:589 myapp[706:775] Loading Frame: 26.000000 26.000000 
2012-01-01 14:43:39:792 myapp[706:775] Loading ActView: 26.000000 0.000000 

これをねじ込むされますこの古いiPhoneのために私のアプリを越えてすべてのアップビュー。
コードの面で具体的にこれを処理する方法はありますか?または、古いiPhoneのビルド設定で何かを変更する必要がありますか?

+0

何らかの競合状態に似ています。 – CodesInChaos

+1

'frame.origin.x'を設定する行の前にある種のスリープコール(またはspinwait)を追加します。問題が解決されない場合は、適切な同期を使用して修正する必要がある競合状態が発生しています。 – CodesInChaos

答えて

3

問題はARMV6ベースのデバイスにのみ存在し、最適化されたコードをビルドする場合にのみ問題が発生する可能性があります。これはおそらく、llvmの最適化されたARMV6に組み込まれています。

ユーザー定義の設定としてビルド設定に以下を追加します。これは、それが完全にThumb命令セットを無効にしない何 enter image description here

:これはのようになります方法です

GCC_THUMB_SUPPORT = NO 

あなたのアプリをビルドします。これが適切に機能するアプリケーションになる場合、この設定がパフォーマンスに重大な影響を与える可能性があるため、アプリケーションがARMV7デバイスで正常に動作するかどうかを確認してください。

これはGCC固有の設定であるように見えますが、これはまだLLVMによって尊重され、更新が必要ないくつかの古いプロジェクトに私の背後を保存しました。

+1

これは正しい解決策であり、Xcode 4.3 betaでも修正されています。 –

+0

@ JoshuaWeinberg Appleが最終的にこれを修正したことを知って嬉しいです。言葉を広めてくれてありがとう。 – Till

+0

はい、これが私の問題を解決しました。これは4.3以降で修正されています。新しいバージョンのxcodeの修正により、armv7のコンパイルが遅くなるのですか? –

0

アプリが古い携帯電話で実行されている場合は、いつも異なるコード設定を指定できます。プリコンパイラの見出しを使用します。

+0

競合状態であれば、そのバグはすべての電話機に存在する可能性がありますが、古いものにしか気づかれません。その場合、症状を隠すことは適切な解決策ではありません。 – CodesInChaos

+0

あなたは何を提案しますか?他の唯一のオプションがそれと一緒に暮らしているようです... – DGund

関連する問題