*** -[Scrapboom.iPhone.NewsFeedTableView _endCellAnimationsWithContext:] 中的断言失败,/SourceCache/UIKit/U
Posted
技术标签:
【中文标题】*** -[Scrapboom.iPhone.NewsFeedTableView _endCellAnimationsWithContext:] 中的断言失败,/SourceCache/UIKit/UIKit-2903.2/UITableView.m:1076【英文标题】:*** Assertion failure in -[Scrapboom.iPhone.NewsFeedTableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2903.2/UITableView.m:1076 【发布时间】:2013-10-17 05:34:19 【问题描述】:我在 UITablViewSource 中使用下面的代码
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
UIImage scaledImage=null;
string cellIdentifier = "NewsFeedCell";
var newsFeedCellItem = NewsFeedCellItemList [indexPath.Row];
var newsFeedCell = new NewsFeedCell (NewsFeedScreenInstance, newsFeedCellItem, cellIdentifier, indexPath);
if (newsFeedCell != null)
if (!String.IsNullOrWhiteSpace (newsFeedCellItem.FeedItem.Picture.PreviewUrl))
var image = ImageStore.Get (newsFeedCellItem.FeedItem.Picture.PreviewUrl);
if(image != null)
newsFeedCellItem.FeedItem.Picture.Image = image;
scaledImage = ImageHelper.Scale(image, new SizeF (528, 528));
if (scaledImage != null)
newsFeedCell.ScrapImage = scaledImage;
else
BeginDownloadImage (tableView, indexPath);
return newsFeedCell;
#endregion
#region PRIVATE METHODS
private void BeginDownloadImage (UITableView tableView, NSIndexPath indexPath)
Action successAction = () =>
this.BeginInvokeOnMainThread (() =>
tableView.BeginUpdates ();
tableView.ReloadRows (new NSIndexPath[] indexPath , UITableViewRowAnimation.Fade);
tableView.EndUpdates ();
);
;
ImageStore.BeginDownloadImage(NewsFeedCellItemList [indexPath.Row].FeedItem.Picture.PreviewUrl, successAction);
#endregion
*描述:*但是下面的部分代码给出了异常
* -[Scrapboom.iPhone.NewsFeedTableView _endCellAnimationsWithContext:] 中的断言失败,/SourceCache/UIKit/UIKit-2903.2/UITableView.m:1076 和应用程序是 被绞死或有时崩溃。
tableView.ReloadRows (new NSIndexPath[] indexPath , UITableViewRowAnimation.Fade);
【问题讨论】:
【参考方案1】:您的 GetCell
实现看起来有问题。您应该尝试Dequeue
一个单元格,然后在它失败时创建一个单元格(在 ios6+ 中甚至不需要Register*ForCellReuse
:
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
string cellIdentifier = "NewsFeedCell";
var newsFeedCell = tableView.DequeueReusableCell (cellIdentifier) as NewsFeedCell;
//only required if you haven't used Register*ForCellReuse
if (newsFeedCell == null)
newsFeedCell = new NewsFeedCell (..., cellIdentifier,...);
//update your cell image and components here.
要了解更多信息,请阅读tutorials。
如果您环顾四周,您还会发现经过验证的工作模式可以在表格单元格中延迟加载图像。并不是说你的第一眼看起来不对,但它并不常见。
【讨论】:
NewsFeedCell newsFeedCell= tableView.CellAt (indexPath) as NewsFeedCell;上面的代码返回 newsFeedCell=null 这是可能的,如果它不再显示的话。也就是说,细胞已经被回收了。在这种情况下,您甚至不必费心显示图像。以上是关于*** -[Scrapboom.iPhone.NewsFeedTableView _endCellAnimationsWithContext:] 中的断言失败,/SourceCache/UIKit/U的主要内容,如果未能解决你的问题,请参考以下文章