セルの画像が悪い画像の場合、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に設定することですが、これにより空白が残ります。セル全体を削除したいので、ユーザーはそれが存在することさえ知りません。indexrowpath が getcell 呼び出しを開始するまで imageUrl が悪いかどうかわからないため、セルの高さを 0 に設定することはできません。UITableView にバインドされたデータからすべての画像をチェックしたくありません。これは、簡単に 100 個のアイテムになる可能性があるため、パフォーマンスが大幅に低下するためです。現在、最初の 200 アイテムを提供する Web サービスからアイテムを取得しています。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;
});
}