MAUI で iOS アプリをデバッグしたら "[UIPickerView setFrame:]: invalid size {320, 216} pinned to {320, 216}"の例外が出た
概要
MAUI で iOS アプリのデバッグをしらた以下の例外が発生し、デバッグに失敗しました。
今回は、この例外を解決するためにやったことを書いておこうと思います。
- [UIPickerView setFrame:]: invalid size {320, 216} pinned to {320, 216}
結論
エラーメッセージに出ていた UIPickerView は関係ありませんでした。
そして、実際の原因は、Load 処理で実装していた SQLite の Connection 生成処理で例外が発生していたことでした。
例外解決のためにやったこと
1. Xaml の Picker を消してデバッグしてみた
UIPickerView は iOS のピッカーです。
そのピッカーでエラーが発生しているようでしたので、
まずはピッカーを削除してみました。
そして、ピッカーを削除してデバッグしたところ、" [UIPickerView setFrame:]: invalid size {320, 216} pinned to {320, 216}" の例外は発生しなくなりました。
しかし、他の例外が発生し、結局デバッグはできませんでした。
2. ロード処理の削除
ピッカーを削除しても別の例外が発生するため、そもそもロード処理で失敗しているのではないかと考え、
とりあえずロード処理を削除してみました。
また、削除していたピッカーはいったん元に戻しました。
結果、画面が表示されました。
??
" [UIPickerView setFrame:]: invalid size {320, 216} pinned to {320, 216}" はデバッグの失敗と関係ない?
。。。
とりあえずデバッグ実行してみました。
非同期で SQLite にアクセスしているところでアプリが止まっているように見える。。。
3. SQLite の async をやめる
非同期がよくないのかと思い、とりあえずSQLite のアクセスを非同期でのアクセスから同期処理でのアクセスに変更してみました。
その結果、以下の例外が出ていることがわかりました。
- The type initializer for 'SQLite.SQLiteConnection' threw an exception.
どうやら、MAUI を使用して iOS で SQLite を使うためには、NuGet パッケージが sqlite-net-pcl だけでは足りなかったようです。
というわけで、以下の NuGet パッケージの追加と AppDelegate への処理の追加をし、デバッグしてみました。
結果、デバッグに成功し、画面が表示できました。
- SQLitePCLRaw.bundle_green(Version="2.1.4")
- SQLitePCLRaw.provider.sqlite3(Version="2.1.4")
[Register("AppDelegate")] public class AppDelegate : MauiUIApplicationDelegate { protected override MauiApp CreateMauiApp() { raw.SetProvider(new SQLite3Provider_sqlite3()); return MauiProgram.CreateMauiApp(); } }
ちなみに、SQLite のアクセスは、非同期での悪性巣に戻し、
また、sqlite-net-pcl のバージョンも "1.8.116" にアップデートしてから実行しました。