我有一個異步的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。
否則,讓我知道如果我正在討論這個錯誤。 「
我會玩它。你認爲哪個對象是我的情況,UITableViewSource?現在我想我在成員變量中存儲UISearchDisplayDelegate和UITableViewSource,但我會檢查。奇怪的是,它每次都發生在第二次搜索時,GC會更隨機一點嗎? – jonathanpeppers 2012-01-05 12:41:26
我絕對保存這些代表,所以他們不應該被收集。我會做一個repro並把它放在某個地方。 – jonathanpeppers 2012-01-05 13:53:30
在Xamarin上發佈bug:http://bugzilla.xamarin.com/show_bug.cgi?id=2746我附上了一個repro,所以你可以下載它來查看我的代碼。 – jonathanpeppers 2012-01-05 15:08:49