OSDN Ticket Archive


Ticket #41989

iOS版 バックグラウンドスレッドからのUI API呼び出し

登録: 2021-04-11 22:46 最終更新: 2021-04-12 00:15

報告者:
yknk
担当者:
yknk
チケットの種類:
バグ
状況:
完了
コンポーネント:
MIDITrail Ver.1.3.x for iOS
マイルストーン:
Version 1.3.3 for iOS (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

アプリ実行中にXcodeに次の警告が表示される。

UI API called from background thred
  [UIView bounds] must be used from main thread only

発生箇所はこちら。

MTDashboard::_GetCounterPos
    rect = [m_pView bounds];

チケットの履歴

2021-04-11 22:46 更新者: yknk
  • 新しいチケット "iOS版 バックグラウンドスレッドからのUI API呼び出し" が作成されました
2021-04-11 22:46 更新者: yknk
コメント

原因

描画クラスのメンバに、他のビューのポインタ(UIView*)を持っており、クライアント領域のサイズを取得するために利用していた。 シーン生成時にスレッドを起動しており、この中でダッシュボード描画オブジェクトの初期化を行っているため、警告が発生する。

2021-04-11 22:46 更新者: yknk
コメント

対策方針

描画クラスのメンバに、他のビューのポインタ(UIView*)を持たず、クライアント領域のサイズを持つように修正する。

2021-04-11 22:46 更新者: yknk
コメント

対策1:アプリケーションクラス

MIDITrailApp::createSceneWithType

シーン生成処理の引数にboundsを追加。

2021-04-11 22:46 更新者: yknk
コメント

対策2:メインビュー制御クラス

MTMainViewCtrl

以下メンバを追加。

  • スクリーンサイズ情報 m_ViewBounds

MTMainViewCtrl::initWithNibName:bundle:rendererParam

メンバm_ViewBoundsの初期化処理を追加。

MTMainViewCtrl::getViewBounds

ビュー境界取得メソッドを追加。

MTMainViewCtrl::initializeOpenGLContext

メンバm_ViewBoundsの設定処理を追加。

2021-04-11 22:46 更新者: yknk
コメント

対策3:ダッシュボード描画クラス

MTDashboard

メンバからm_pViewを削除。 メンバにm_ViewBoundsを追加。

MTDashboard::MTDashboard

メンバm_pView初期化処理を削除。 メンバm_ViewBounds初期化処理を追加。

MTDashboard::Create

引数UIView*をCGRectに変更。 メンバm_pView設定処理を削除。 メンバm_ViewBounds設定処理を追加。

MTDashboard::_GetCounterPos

メンバm_pView参照をm_ViewBounds参照に変更。

MTDashboard::_GetCounterFPSPos

メンバm_pView参照をm_ViewBounds参照に変更。

2021-04-11 22:47 更新者: yknk
コメント

対策4:モニタ用ダッシュボード描画クラス

MTDashboardLive

メンバからm_pViewを削除。 メンバにm_ViewBoundsを追加。

MTDashboardLive::MTDashboardLive

メンバm_pView初期化処理を削除。 メンバm_ViewBounds初期化処理を追加。

MTDashboardLive::Create

引数UIView*をCGRectに変更。 メンバm_pView設定処理を削除。 メンバm_ViewBounds設定処理を追加。

MTDashboardLive::_GetCounterPos

メンバm_pView参照をm_ViewBounds参照に変更。

MTDashboardLive::_GetCounterFPSPos

メンバm_pView参照をm_ViewBounds参照に変更。

2021-04-11 22:47 更新者: yknk
コメント

対策5:シーンクラス

MTScene::Create

引数にCGRectを追加。

MTScenePianoRoll2D::Create

引数にCGRectを追加。

MTScenePianoRoll2DLive::Create

引数にCGRectを追加。

MTScenePianoRoll3D::Create

引数にCGRectを追加。

MTScenePianoRoll3DLive::Create

引数にCGRectを追加。

MTScenePianoRollRain::Create

引数にCGRectを追加。

MTScenePianoRollRain2D::Create

引数にCGRectを追加。

MTScenePianoRollRain2DLive::Create

引数にCGRectを追加。

MTScenePianoRollRainLive::Create

引数にCGRectを追加。

MTScenePianoRollRing::Create

引数にCGRectを追加。

MTScenePianoRollRingLive::Create

引数にCGRectを追加。

MTSceneTitle::Create

引数にCGRectを追加。

2021-04-12 00:15 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました

添付ファイルリスト

添付ファイルはありません