2012-01-05 49 views
2

我有一個異步的UISearchBar設置如下:MonoTouch的 - 異步的UISearchBar

  • 繼承UISearchDisplayDelegate &將其設置爲myController.SearchDisplayController.Delegate
  • 覆蓋ShouldReloadForSearchString - >啓動一個新的線程調用Web服務並返回false不重裝UITableView
  • Web服務在後臺完成 - >調用BeginInvokeOnMainThread()
  • 刷新tableview中通過myController.SearchDisplayController.SearchResultsTableView.ReloadData()

一切工作在我做的第一個搜索,我可以退格或鍵入並看到異步彈出的新結果。

如果我完成搜索或取消它,然後再試一次,調用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中的一個錯誤?如果可能的話,我可以創建一個repro。

否則,讓我知道如果我正在討論這個錯誤。 「

回答

2

這不是一個綁定的錯誤(我檢查他們確定)。數據源應設置在UISearchDisplayController上,而不是在表格視圖上(例如SearchDisplayController.SearchResultsTableView)。

督察取代:

 SearchDisplayController.SearchResultsTableView.Source = _tableSource; 

有:

 SearchDisplayController.SearchResultsSource = _tableSource; 

這將確保UISearchDisplayController內部狀態使用之間正確地更新。

0

」發送到實例的無法識別的選擇器「也可以表示該對象已被垃圾收集到您發送消息,您確定它仍然存在於reloadData調用時?

它發生在我身上,有時當我用代碼創建UI並在loadView方法內創建它時,並且只在方法範圍上使用表視圖變量,而不是在類範圍中使用表視圖變量。

治癒很簡單,把變量放在方法範圍之外。

+0

我會玩它。你認爲哪個對象是我的情況,UITableViewSource?現在我想我在成員變量中存儲UISearchDisplayDelegate和UITableViewSource,但我會檢查。奇怪的是,它每次都發生在第二次搜索時,GC會更隨機一點嗎? – jonathanpeppers 2012-01-05 12:41:26

+0

我絕對保存這些代表,所以他們不應該被收集。我會做一個repro並把它放在某個地方。 – jonathanpeppers 2012-01-05 13:53:30

+0

在Xamarin上發佈bug:http://bugzilla.xamarin.com/show_bug.cgi?id=2746我附上了一個repro,所以你可以下載它來查看我的代碼。 – jonathanpeppers 2012-01-05 15:08:49

2

發現解決方法:

  • 覆蓋WillBeginSearchUISearchDisplayDelegate
  • 設置searchController.SearchResultsTableView.Source爲null
  • 當你要顯示的結果,設置searchController.SearchResultsTableView.Source你的表視圖源

還沒有聽到如果Xamarin認爲這是一個錯誤。我也會在錯誤頁面上發佈。