Ticket #41989

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

Open Date: 2021-04-11 22:46 Last Update: 2021-04-12 00:15

Reporter:
Owner:
Type:
Status:
Closed
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

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

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

発生箇所はこちら。

MTDashboard::_GetCounterPos
    rect = [m_pView bounds];

Ticket History (3/9 Histories)

2021-04-11 22:46 Updated by: yknk
  • New Ticket "iOS版 バックグラウンドスレッドからのUI API呼び出し" created
2021-04-11 22:46 Updated by: yknk
Comment

原因

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

2021-04-11 22:46 Updated by: yknk
Comment

対策方針

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

2021-04-11 22:46 Updated by: yknk
Comment

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

MIDITrailApp::createSceneWithType

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

2021-04-11 22:46 Updated by: yknk
Comment

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

MTMainViewCtrl

以下メンバを追加。

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

MTMainViewCtrl::initWithNibName:bundle:rendererParam

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

MTMainViewCtrl::getViewBounds

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

MTMainViewCtrl::initializeOpenGLContext

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

2021-04-11 22:46 Updated by: yknk
Comment

対策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 Updated by: yknk
Comment

対策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 Updated by: yknk
Comment

対策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 Updated by: yknk
  • Status Update from Open to Closed
  • Resolution Update from None to Fixed

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login