У меня есть асинхронная настройка UISearchBar следующим образом:
- Inherit UISearchDisplayDelegate и установите его для
myController.SearchDisplayController.Delegate
- Переопределить
ShouldReloadForSearchString
-> запустить новый поток, вызывающий веб-сервис, и вернуть false, чтобы не перезагрузить UITableView
- Веб-служба завершает работу в фоновом режиме -> вызов
BeginInvokeOnMainThread()
- Перезагрузить просмотр таблицы через
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? Если это возможно, я могу создать копию.
В противном случае, дайте мне знать, если я поступаю неправильно.