次のように私は、非同期UISearchBarを設定している: - > Webサービスを呼び出して新しいスレッドを起動していないにfalseを返しMonoTouchで - 非同期UISearchBar
- 継承UISearchDisplayDelegate &は
myController.SearchDisplayController.Delegate
- オーバーライド
ShouldReloadForSearchString
のためにそれを設定しましたリロードUITableView
- Webサービスは、バックグラウンドで完了 - >
myController.SearchDisplayController.SearchResultsTableView.ReloadData()
0を経由して
- リロードテーブルビューを呼び出します
BeginInvokeOnMainThread()
私が最初に行う検索ではすべて動作しますが、バックスペースを入力するか、入力して非同期で新しい結果のポップアップを表示できます。
私は、検索を完了するか、再びReloadData(への呼び出しを試行し、それをキャンセルした場合)は、次のクラッシュが発生します。
2012-01-04 23:05:11.589 myApp[98047:2407] -[MainController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xb0ea840
Stacktrace:
at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff>
at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00042] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29
at MyApp.Application.Main (string[]) [0x00000] in /Users/jonathanpeppers/Projects/MyApp/Main.cs:13
at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>
私は何を処分していない、としてすべての私の代表団を保管しておりますメンバ変数を使用してGCの問題を回避します。すべてのバックグラウンドスレッドは、BeginInvokeOnMainThread()
も適切に呼び出しているようです。
これはMonoTouchのバグでしょうか?もしそうなら、私はレプロを作ることができます。
それ以外の場合は、私が間違っているかどうか教えてください。
私はそれと遊びます。私の場合は、どのオブジェクトをあなたはそれがUITableViewSourceだと思いますか?今はメンバー変数にUISearchDisplayDelegateとUITableViewSourceを格納していると思いますが、確認します。毎回2回目の検索でそれが起こるのも奇妙で、GCはもう少しランダムでしょうか? – jonathanpeppers
私は間違いなくその代議員を保存しているので、収集されるべきではありません。私はレプロを作り、それをどこかに置く。 – jonathanpeppers
ここにXamarinにバグを投稿しました:http://bugzilla.xamarin.com/show_bug.cgi?id=2746私はreproを添付していますので、ダウンロードして自分のコードを見ることができます。 – jonathanpeppers