MonoTouchを使用して私の最初のアプリを作成しています。それは、sqliteデータベースからコードを検索し、異なるビュー上のコードのさまざまな意味を持ち出す、かなりシンプルなアプリケーションです。私はInterface Builderを使用しました。私の質問は、nibファイルをロードする正しい方法に関するものです。MonoTouchでペン先を間違ってロードするとメモリリークが発生する可能性がありますか?
マイカスタムテーブルビューコントローラはこのように構成されています.designer.csファイルで
public partial class HAZARDTableViewController : UITableViewController
{
#region Constructors
// The IntPtr and initWithCoder constructors are required for items that need
// to be able to be created from a xib rather than from managed code
public HAZARDTableViewController (IntPtr handle) : base (handle)
{
}
[Export ("initWithCoder:")]
public HAZARDTableViewController (NSCoder coder) : base (coder)
{
Initialize();
}
public HAZARDTableViewController()
{
Console.WriteLine("HAZARDTableViewController():Constructor");
Initialize();
}
:
public partial class HAZARDTableViewController : UITableViewController
{
#region Constructors
//The IntPtr and initWithCoder constructors are required for items that need
// to be able to be created from a xib rather than from managed code
public HAZARDTableViewController (IntPtr handle) : base (handle)
{
}
[Export ("initWithCoder:")]
public HAZARDTableViewController (NSCoder coder) : base (coder)
{
Initialize();
}
public HAZARDTableViewController() //: base ("HAZARDTableViewController", null)
{
Console.WriteLine("HAZARDTableViewController():Constructor");
Initialize();
}
[MonoTouch.Foundation.Register("HAZARDTableViewController")]
public partial class HAZARDTableViewController {
private MonoTouch.UIKit.UIView __mt_view;
private MonoTouch.UIKit.UITableView __mt_tableView;
#pragma warning disable 0169
[MonoTouch.Foundation.Connect("view")]
private MonoTouch.UIKit.UIView view
{
get {
this.__mt_view = ((MonoTouch.UIKit.UIView)(this.GetNativeField("view")));
return this.__mt_view;
}
set {
this.__mt_view = value;
this.SetNativeField("view", value);
}
}
[MonoTouch.Foundation.Connect("tableView")]
private MonoTouch.UIKit.UITableView tableView {
get {
this.__mt_tableView = ((MonoTouch.UIKit.UITableView)(this.GetNativeField("tableView")));
return this.__mt_tableView;
}
set {
this.__mt_tableView = value;
this.SetNativeField("tableView", value);
}
}
私が探していますことの一つは、どのようにカスタム・テーブル・ビューでありますコントローラはnibファイルをロードします。私の理解では、このコンストラクタを使用することである。
public HAZARDTableViewController() : base ("HAZARDTableViewController", null)
これは、この例外が発生:
未処理の例外:MonoTouch.Foundation.MonoTouchException:Objective-Cの例外がスローされます。名前:NSInternalInconsistencyException理由: - [UITableViewController loadView]が "HAZARDTableViewController"ペン先をロードしましたが、UITableViewを取得しませんでした。
私は、このチュートリアルでBryan Costanichが提案したように、このコンストラクタを同期してロードしようと試みました。
MonoTouch.Foundation.NSBundle.MainBundle.LoadNib ("HAZARDTableViewController", this, null); ViewDidLoad();
コードがViewDidLoad
にTableView
を指す場合、これはnull参照例外をもたらします。
public HAZARDTableViewController (string nibName, NSBundle bundle) : base(nibName, bundle) {
Initialize();
}
:
未処理の例外:MonoTouchで私はまた、Xamarinのdocumenationに従って、このコンストラクタを試してみた(ちなみに私が代わりに
TableView
のtableView
を使用して試してみました。)。 Foundation.MonoTouchException:Objective-C例外がスローされました。名前:NSInternalInconsistencyException理由: - [UITableViewController loadView]が "HAZARDTableViewController"ペン先をロードしましたが、UITableViewを取得しませんでした。
私はちょうど私のペン先をロードしようとせずに自分のコンストラクタを作るときに動作します。
public HAZARDTableViewController()
{
Console.WriteLine("HAZARDTableViewController():Constructor");
Initialize();
}
具体的にはペン先をロードせずにこの動作を理解できません。なぜこれは私のアプリが約6または7分の使用の後に落ちるということです。 私は楽器を介してそれを入れて、それはメモリを溶かす。私はリストをクリアし、緩い参照を探しました。とにかく別の質問があります。私は細かい櫛でコードを実行していますが、正しくnibリソースを解放していない可能性がありますか? IBは私にとってはブラックボックスのビットです。
要約すると、私は知りたいと思います: 1.ペン先を正しくロードする方法は何ですか? 2.上記の試みはなぜ機能しないのですか? 3.これはメモリリークを引き起こす可能性がありますか、間違った場所を探していますか?