Iphone Apple在导航控制器内延迟加载图像,恢复为占位符图像
我由苹果公司实现了LazyTableImages项目(),但在我的版本中,我使用RestKit获取数据,我的UItableviewcontroller被推到导航堆栈上 所以我避开了苹果在app委托中所做的任何事情来获取xml。我认为这不是问题所在。我的问题是,当您使用导航后退按钮或访问另一个选项卡栏项退出UITableviewcontroller并返回时,先前加载的图像会显示出来,但它会立即加载占位符图像。基本上,情况正好相反 它类似于UITableview缓存的数据,因此当您返回时,它会干扰惰性表映像。我需要知道是否有人在必须退出的地方实现了这段代码 编辑: 看起来第二次imageDownloader不是nil,这会阻止加载图像。我还在想办法绕过它。当然,我可以去掉这个条件,但我不知道这对性能是否“不好” imageDownloadsInProgress是一个可变字典,即使您退出,它仍然拥有所有数据。现在已经变成了另一个问题,如果用户回击或偏离当前视图,如何删除imageDownloadsInProgress imageDownloadsInProgress被保留,但是我在dealloc方法中添加了[imagesDownloadsInProgress release],但是我认为它不会运行Iphone Apple在导航控制器内延迟加载图像,恢复为占位符图像,iphone,ios,cocoa-touch,Iphone,Ios,Cocoa Touch,我由苹果公司实现了LazyTableImages项目(),但在我的版本中,我使用RestKit获取数据,我的UItableviewcontroller被推到导航堆栈上 所以我避开了苹果在app委托中所做的任何事情来获取xml。我认为这不是问题所在。我的问题是,当您使用导航后退按钮或访问另一个选项卡栏项退出UITableviewcontroller并返回时,先前加载的图像会显示出来,但它会立即加载占位符图像。基本上,情况正好相反 它类似于UITableview缓存的数据,因此当您返回时,它会干扰惰
-(void)startEventImageDownload:(WhatsonEvent *)eventRecord forIndexPath:(NSIndexPath *)indexPath
{
EventImageDownloader *imageDownloader = [imageDownloadsInProgress objectForKey:indexPath];
if(imageDownloader == nil)
{
NSLog(@"%@",eventRecord.title);
imageDownloader = [[EventImageDownloader alloc] init];
imageDownloader.eventRecord = eventRecord;
imageDownloader.indexPathInTableView = indexPath;
imageDownloader.delegate = self;
[imageDownloadsInProgress setObject:imageDownloader forKey:indexPath];
[imageDownloader startDownload];
[imageDownloader release];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
}
我这样做的方式是构建自己的缓存并将图像保存在用户文档目录中。当我调用
[tableView reloadData]
(您正在调用它,对吗?)时,它首先检查每个单元格的图像是否在本地,否则它将从提要惰性地加载它们。告诉我你是否需要代码 问题在于self.imagedownloadsinproges=[NSMutableDictionary dictionary]被放置在ViewDidLoad方法中,目的是每次都重置字典。但是,如果将代码放在推送到导航控制器上的视图中,ViewDidLoad只会第一次执行(我不确定是这种情况)。我将该行添加到ViewWillDisplay,因为它在每次将视图放在屏幕上时都会运行 如果你使用自己的东西,这可能是最好的处理方法。我个人使用EGOImageLoader(google it)和附带的EGOCache,它工作得很好。无论如何,你可以在你的viewDidAppear
方法中调用reloadData
,这应该可以解决问题。谢谢,我刚刚尝试过,现在仍在进行。我不明白,当我退出我的self.list变为零,然后我不得不再次加载数据。它应该是第一次加载,因为表应该没有任何信息?它一定保留了什么。我可以看看你的密码吗?我不认为我使用苹果的代码不当,但他们似乎没有考虑到有人重新加载表?