2011-01-09 2 views
1

サブビュー内のコントロールを所有しているコントローラのフィールドにマップするのに問題があります。具体的には、各「コントロール」のアウトレットをFile's Ownerにマップしました。 Monotouchはコントローラのxib designer.csファイルのコードを生成し、これらのコントロールをコントローラクラスのプロパティとして参照しました。しかし、自分のコードを実行すると、コントロールにプロパティを設定しようとすると、オブジェクトにnullエラーが発生します。デバッガで問題を調べる。アウトレットにxibファイルの名前でアクセスしようとすると、GetNativeFieldがnullを返すように見えます。iPhone、Monotouch、およびXIBのアウトレットの問題

これがどうして起こるのでしょうか?私は.xibファイルと生成されたコードをチェックしました。 Outlet、Property、およびFieldの名前は互いに一致しています。

建設的な入力があれば幸いです。

おかげで、 フランク

答えて

0

私は問題の原因を突き止めました。それは私がスタックにコントローラを押したかだった。

using(var batteryController = new BatteryController()){ 

    navigationController.PushViewController(batteryController,true); 

} 

処分がコントローラ上で呼び出されたときに、NIBのリソースはメモリから削除されているようです。それが問題の原因となっていました。

しかし、これは別の質問を引き起こします。スタックにプッシュされたら、新しいコントローラでdisposeを呼び出すはずですか?目標Cでは、スタック上のコントローラを押すと、あなたは後にリリースを呼び出すはずです。だから私は何が間違っている?

+1

MonoTouchにはガベージコレクタがあり、ドキュメントに記載されているようにアプリケーションで参照されていないリソースを自動的に解放します - > Monoにはガベージコレクタが付属しています。オブジェクトを解放するために必要な簿記。これにより、共通のメモリリークが回避され、これらのリークを回避するために書き込まれる必要があるコードの量が削減されます。出典:http://monotouch.net/index.php?title=Features&highlight=Garbage+collector – dalexsoto

-1

この写真にhttp://yfrog.com/f/h7faip/私のブログにも簡単な電卓のそのビデオを、この試みを与えるようにあなたはスペイン語での、AppDelegateにコンセントを追加する必要がありますが、あなたはそれにそのを見れば非常に自明ですあなたはここにそれを見ることができますhttp://alexsoto.me/calculadora-monotouchそれはあなたが始めるのを助ける必要があります:)これは助けて幸運、私は何かを助けることができる場合私に知らせてください

編集:また、あなたが助けるべきサブビューを使用して、これは英語でhttp://www.alexyork.net/blog/post/Selecting-a-contact-from-the-Address-Book-with-MonoTouch.aspx

0

アウトレットは、ビューがロードされた後にのみアクセス可能で、LoadView()で発生するか、またはUIViewControllerの「View」プロパティにアクセスすることによって(ビューが暗黙的にロードされることに注意してください)、注意してください。 それだけが、IBコンテンツが構築され、使用可能になります。

これを変更する場合は、手動でLoadView()に電話するか、ビューで上書きするか、base.LoadView()に電話して、アウトレットにアクセスします。

関連する問題