Iphone Apple在导航控制器内延迟加载图像,恢复为占位符图像

Iphone Apple在导航控制器内延迟加载图像,恢复为占位符图像,iphone,ios,cocoa-touch,Iphone,Ios,Cocoa Touch,我由苹果公司实现了LazyTableImages项目(),但在我的版本中,我使用RestKit获取数据,我的UItableviewcontroller被推到导航堆栈上 所以我避开了苹果在app委托中所做的任何事情来获取xml。我认为这不是问题所在。我的问题是,当您使用导航后退按钮或访问另一个选项卡栏项退出UITableviewcontroller并返回时,先前加载的图像会显示出来,但它会立即加载占位符图像。基本上,情况正好相反 它类似于UITableview缓存的数据,因此当您返回时,它会干扰惰

我由苹果公司实现了LazyTableImages项目(),但在我的版本中,我使用RestKit获取数据,我的UItableviewcontroller被推到导航堆栈上

所以我避开了苹果在app委托中所做的任何事情来获取xml。我认为这不是问题所在。我的问题是,当您使用导航后退按钮或访问另一个选项卡栏项退出UITableviewcontroller并返回时,先前加载的图像会显示出来,但它会立即加载占位符图像。基本上,情况正好相反

它类似于UITableview缓存的数据,因此当您返回时,它会干扰惰性表映像。我需要知道是否有人在必须退出的地方实现了这段代码

编辑:

看起来第二次imageDownloader不是nil,这会阻止加载图像。我还在想办法绕过它。当然,我可以去掉这个条件,但我不知道这对性能是否“不好”

imageDownloadsInProgress是一个可变字典,即使您退出,它仍然拥有所有数据。现在已经变成了另一个问题,如果用户回击或偏离当前视图,如何删除imageDownloadsInProgress

imageDownloadsInProgress被保留,但是我在dealloc方法中添加了[imagesDownloadsInProgress release],但是我认为它不会运行

-(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变为零,然后我不得不再次加载数据。它应该是第一次加载,因为表应该没有任何信息?它一定保留了什么。我可以看看你的密码吗?我不认为我使用苹果的代码不当,但他们似乎没有考虑到有人重新加载表?