2012-01-05 7 views
2

次のように私は、非同期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のバグでしょうか?もしそうなら、私はレプロを作ることができます。

それ以外の場合は、私が間違っているかどうか教えてください。

答えて

2

これは拘束力のあるバグではありません(確認しました)。データソースは、テーブルビューではなくUISearchDisplayControllerに設定する必要があります(例:SearchDisplayController.SearchResultsTableView)。

IOWは交換してください:と

 SearchDisplayController.SearchResultsTableView.Source = _tableSource; 

 SearchDisplayController.SearchResultsSource = _tableSource; 

をこのUISearchDisplayControllerの内部状態は使用の間に適切に更新されるようになります。

0

"インスタンスに送信されたセレクタが認識されません"は、オブジェクトがメッセージを送信するためにガベージコレクトされたことを示すこともできますが、reloadDataコール時にはまだ存在していますか?

コードでUIを作成してloadViewメソッド内で作成し、テーブルスコープ変数をメソッドスコープでしかなく、クラススコープではない場合は、時々私に起こります。

治療法は簡単ですが、変数をメソッドスコープの外に置いてください。回避策発見

+0

私はそれと遊びます。私の場合は、どのオブジェクトをあなたはそれがUITableViewSourceだと思いますか?今はメンバー変数にUISearchDisplayDelegateとUITableViewSourceを格納していると思いますが、確認します。毎回2回目の検索でそれが起こるのも奇妙で、GCはもう少しランダムでしょうか? – jonathanpeppers

+0

私は間違いなくその代議員を保存しているので、収集されるべきではありません。私はレプロを作り、それをどこかに置く。 – jonathanpeppers

+0

ここにXamarinにバグを投稿しました:http://bugzilla.xamarin.com/show_bug.cgi?id=2746私はreproを添付していますので、ダウンロードして自分のコードを見ることができます。 – jonathanpeppers

2

UISearchDisplayDelegate

    • オーバーライドWillBeginSearchはあなたが表示する結果を持っている場合、
    • をnullにsearchController.SearchResultsTableView.Sourceを設定聞いてまだテーブルビューソース

    searchController.SearchResultsTableView.Sourceを設定しましたもしXamarinがそれがバグだと思うならば。私はバグページにも投稿します。