エラーの発生タイミングと発生したエラー
Xamarin.iOSで作成したアプリをデバック実行した際に、画面遷移のタイミングでエラーが発生していました。
そして、ハンドルされたエラーには、以下のメッセージが表示されていました。
- Foundation.MonoTouchException: Objective-C exception thrown. Name: NSUnknownKeyException Reason: [
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key xxxView.
このメッセージの意味は簡単に言うと、「表示しようとしている画面のクラスにxxxViewという名前の項目がありません。」という意味です。
また、このエラーは、以下のクラスの「UIApplication.Main(args, null, "AppDelegate");」で発生していました。
namespace ToDoButton.iOS { public class Application { // This is the main entry point of the application. static void Main(string[] args) { // if you want to use a different Application Delegate class from "AppDelegate" // you can specify it here. UIApplication.Main(args, null, "AppDelegate"); } } }
エラーの原因
画面遷移で発生していたエラーの原因は、ストーリーボードのViewControllerに紐づけたクラスのdesigner.csファイルが存在しなかったことでした。
Xamarin.iOSでは、ストーリーボードのViewControllerに配置したViewなどの情報を自動でdesigner.csファイルに定義しています。
そのため、designer.csファイルが存在しない場合、ストーリーボードのViewControllerへ配置したViewなどの情報がどこにも保存されなくなってしまいます。
結果として、画面実行時に、表示しようとしている画面にxxxViewという項目がありませんというエラーとなっているようです。
designer.csが存在しなかった原因
designer.csファイルが存在しなかった理由は、ソリューションからクラスを追加で作成したクラスをストーリーボードのViewControllerに紐づけていたためでした。
具体的には、以下の手順でストーリーボードのViewControllerにソリューションから追加したクラスを紐づけたことが原因でした。
【手順】
- ソリューションからクラスを追加でクラスを作成する
- 上記で作成したクラスのクラス名をストーリーボードのViewControllerのIdentityのClassに設定する
- 自動で作成されていたxxx_.csクラスを削除する
同じ失敗をしないために
今回のエラーは、自分で追加したクラスをストーリーボードのViewControllerに紐づけようとした結果発生していました。
(上記操作をしても、自分で追加したクラスには、designer.csファイルは追加されないため)
そして、ストーリーボードのIdentityのClassに値を入れることで自動生成されるクラスを使用すれば、このような問題は発生しませんでした。
(Xamarin.iOSでは、ストーリーボードのに値を入れることで必要なクラスを自動で作成してくれる)
そのため、ストーリーボードのViewControllerにクラスを紐づける場合は、以下の手順で操作を行えば、あるはずのdesigner.csファイルがないということによるエラーは発生しなくなります。
【手順】
- ストーリーボードのViewControllerのIdentityのClassにクラス名を設定する
- ストーリーボードを保存する
- ソリューションにトーリーボードのViewControllerのに設定したクラス名と同じ名称のファイルが作成されていることを確認する
- 上記ファイルに実行コードを記述していく
Xamarinの本
Essential Xamarin ネイティブからクロスプラットフォームまで モバイル.NETの世界 (技術書典シリーズ(NextPublishing))
- 作者: 榎本温,平野翼,中村充志,奥山裕紳,末広尚義,中澤慧
- 出版社/メーカー: インプレスR&D
- 発売日: 2017/09/01
- メディア: Kindle版
- この商品を含むブログを見る
Xamarinネイティブによるモバイルアプリ開発 C#によるAndroid/iOS UI制御の基礎
- 作者: 青柳臣一
- 出版社/メーカー: 翔泳社
- 発売日: 2017/09/15
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- 作者: 西村誠
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2017/07/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Xamarinエキスパート養成読本 (Software Design plus)
- 作者: 養成読本編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2017/03/25
- メディア: 大型本
- この商品を含むブログを見る
C#の本
- 作者: 山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2017/12/15
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
実戦で役立つ C#プログラミングのイディオム/定石&パターン
- 作者: 出井秀行
- 出版社/メーカー: 技術評論社
- 発売日: 2017/02/18
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 作者: Bill Wagner,鈴木幸敏
- 出版社/メーカー: 翔泳社
- 発売日: 2018/09/05
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
C# 画像処理・数値プログラミング Visual C# 2017対応 (プレミアムブックス)
- 作者: 石立喬
- 出版社/メーカー: マイナビ出版
- 発売日: 2018/02/12
- メディア: 単行本
- この商品を含むブログ (3件) を見る
- 作者: WINGSプロジェクト,土井毅,?江賢,飯島聡,山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2017/06/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る