我有一个异步 UISearchBar 设置如下:
- 继承 UISearchDisplayDelegate 并为
myController.SearchDisplayController.Delegate 设置它
- Override
ShouldReloadForSearchString -> 启动一个调用 Web 服务的新线程并返回 false 以不重新加载 UITableView
- Web 服务在后台完成 -> 调用
BeginInvokeOnMainThread()
- 通过
myController.SearchDisplayController.SearchResultsTableView.ReloadData()重新加载tableview
第一次搜索时一切正常,我可以退格或键入并查看异步弹出的新结果。
如果我完成搜索或取消它,然后再试一次,对 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 中的错误吗?如果有可能,我可以创建一个重现。
否则,如果我做错了,请告诉我。
Best Answer-推荐答案 strong>
这不是绑定(bind)错误(我检查了它们以确定)。数据源应设置在 UISearchDisplayController 上,而不是 table view 上(例如 SearchDisplayController.SearchResultsTableView )。
IOW 替换:
SearchDisplayController.SearchResultsTableView.Source = _tableSource;
与:
SearchDisplayController.SearchResultsSource = _tableSource;
这将确保 UISearchDisplayController 的内部状态在使用之间正确更新。
关于c# - MonoTouch - 异步 UISearchBar,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/8738013/
|