私の iPhone 用 Monotouch アプリケーションでは、セグメント化されたコントローラーを UITableViewCell に追加して、各行の値のトグルとして機能させようとしています。すべてが正しく表示され、最初の行をクリックすると最初は正しく機能します。ただし、行が画面から出てリロードされた後、セグメント化されたコントローラーをもう一度クリックすると、例外が発生します。
未処理の例外によるランタイムの終了 [エラー] FATAL UNHANDLED EXCEPTION: System.Exception: GC されたタイプ MonoTouch.UIKit.UIControlEventProxy (0x16D793C0) のマネージド オブジェクトで object-c から呼び出されたセレクター ---> System.MissingMethodException : MonoTouch.UIKit.UIControlEventProxy::.ctor(System.IntPtr) のコンストラクターが見つかりません
Monotouch を使用して表のセルにボタンを配置しようとする同様の問題について聞いたことがあります。一般的な推奨事項は、各テーブル セルをリストに追加してガベージ コレクションを防ぐことですが、これはうまくいきませんでした。
この問題を回避する解決策はありますか?
これは、私の GetCell コードのやや簡略化されたバージョンです。
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
Hashtable rowData = dataList [indexPath.Row];
FilterListToggleCell cell;
cell = (FilterListToggleCell)tableView.DequeueReusableCell ("FilterTogglePlusCell");
cacheList.Add(cell.Toggle);//cache only the segcontrol
//cacheList.Add(cell);//also previously tried caching the whole cell
cell.Title.Text = (string)rowData["title"];
if(additionalFields.Contains((string)rowData["key"])){
cell.Toggle.SelectedSegment = 0;
} else {
cell.Toggle.SelectedSegment = 1;
}
cell.Toggle.ValueChanged += (sender, e) => {
UISegmentedControl toggle = (UISegmentedControl)sender;
if(toggle.SelectedSegment == 0){
Console.WriteLine("Toggle YES");
} else {
Console.WriteLine("Toggle NO");
}
};
cell.Toggle.Tag = indexPath.Row;
return cell;
}