Я пытаюсь удалить ячейку из UITableView, если изображение для ячейки является плохим изображением. По сути, мой код выполняет вызов threadPool для изображения каждой ячейки, чтобы сделать поток привязки данных при прокрутке пользователя плавным, как и внутри метода GetCell:
public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
//other stuff
ThreadPool.QueueUserWorkItem(new WaitCallback(RetrieveImage),(object)cell);
}
внутри этого асинхронного метода я вызываю свойство cell.imageUrl и привязываю его к объекту NSData следующим образом:
NSData data = NSData.FromUrl(nsUrl); //nsUrl is cell.imageUrl
Оттуда я знаю, что если data==null, то возникла проблема с получением изображения, поэтому я хочу его удалить. Что я сейчас делаю, так это устанавливаю для скрытого свойства значение true, но это оставляет пустое место. Я хочу полностью удалить ячейку, чтобы пользователь даже не знал, что она существует. Я не могу установить высоту ячейки на 0, потому что я не знаю, является ли imageUrl плохим, пока этот indexrowpath не инициирует вызов getcell. Я не хочу просто проверять все изображения из данных, привязанных к UITableView, потому что это будет большим ударом по производительности, поскольку это может быть легко сто элементов. В настоящее время я получаю элементы из веб-сервиса, который дает мне первые 200 элементов. Как я могу удалить ячейку вообще если data==null пример
NSUrl nsUrl = new NSUrl(cell.imageUrl);
NSData data = NSData.FromUrl(nsUrl);
if (data != null) {
InvokeOnMainThread (() => {
cell.imgImage = new UIImage (data);
//cell.imgImage.SizeToFit();
});
} else {
//I tried the below line but it does't work, I have a cell.index property that I set in the getCell method
_data.RemoveAt(cell.Index);//_data is the list of items that are binded to the uitableview
InvokeOnMainThread (() => {
//cell.Hidden = true;
});
}