gpt4 book ai didi

iphone - NSURLConnection 在 UITableView 滚动之前不是 "firing"

转载 作者:行者123 更新时间:2023-12-03 21:11:26 27 4
gpt4 key购买 nike

我有一个 UITableView,它异步加载图像,并在加载后将其放置在 UITableViewCell 中(我使用的代码与“LazyTableImages”教程中几乎完全相同)。当我滚动表格时,这对所有图像都适用,但它不会加载 View 中第一个图像。

代码肯定工作正常,因为实际发送 NSURLConnection 请求的类被正确调用(我添加了一个 NSLog 并且它到达了控制台)。 NSURLConnection 只是不调用委托(delegate)方法(didReceiveData、connectionDidFinishLoading 等)。

这是我的代码:

<小时/>

HomeController.m

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

NSArray *feed = [feeds objectAtIndex: indexPath.row];

/**
* Name of person
*/
[...]

/**
* Feed entry
*/
[...]

/**
* Misc work
*/
[...]

}

FeedRecord *feedRecord = [self.entries objectAtIndex:indexPath.row];

if( !feedRecord.image ) {

if (self.table.dragging == NO && self.table.decelerating == NO)
{
[self startIconDownload:feedRecord forIndexPath:indexPath];
}

cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];

}

return cell;
}

- (void)startIconDownload:(FeedRecord *)feedRecord forIndexPath:(NSIndexPath *)indexPath
{
IconDownloader *iconDownloader = [imageDownloadsInProgress objectForKey:indexPath];
if (iconDownloader == nil)
{
iconDownloader = [[IconDownloader alloc] init];
iconDownloader.feedRecord = feedRecord;
iconDownloader.indexPathInTableView = indexPath;
iconDownloader.delegate = self;
[imageDownloadsInProgress setObject:iconDownloader forKey:indexPath];
[iconDownloader startDownload];
[iconDownloader release];
}
}
<小时/>

IconDownload.m

#import "IconDownloader.h"
#import "FeedRecord.h"

#define kAppIconHeight 48

@implementation IconDownloader

@synthesize feedRecord;
@synthesize indexPathInTableView;
@synthesize delegate;
@synthesize activeDownload;
@synthesize imageConnection;

#pragma mark

- (void)dealloc
{
[feedRecord release];
[indexPathInTableView release];

[activeDownload release];

[imageConnection cancel];
[imageConnection release];

[super dealloc];
}

- (void)startDownload
{
NSLog(@"%@ %@",@"Started downloading", feedRecord.profilePicture); // this shows in log
self.activeDownload = [NSMutableData data];
// alloc+init and start an NSURLConnection; release on completion/failure
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:
[NSURLRequest requestWithURL:
[NSURL URLWithString:feedRecord.profilePicture]] delegate:self];
self.imageConnection = conn;
NSLog(@"%@",conn); // this shows in log
[conn release];
}

- (void)cancelDownload
{
[self.imageConnection cancel];
self.imageConnection = nil;
self.activeDownload = nil;
}


#pragma mark -
#pragma mark Download support (NSURLConnectionDelegate)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"%@ %@",@"Got data for", feedRecord.profilePicture);
[self.activeDownload appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"%@",@"Fail!");
// Clear the activeDownload property to allow later attempts
self.activeDownload = nil;

// Release the connection now that it's finished
self.imageConnection = nil;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"%@ %@",@"Done", feedRecord.profilePicture);
// Set appIcon and clear temporary data/image
UIImage *image = [[UIImage alloc] initWithData:self.activeDownload];

self.feedRecord.image = image;

self.activeDownload = nil;

[image release];

// Release the connection now that it's finished
self.imageConnection = nil;

NSLog(@"%@ %@",@"Our delegate is",delegate);
// call our delegate and tell it that our icon is ready for display
[delegate feedImageDidLoad:self.indexPathInTableView];
}

@end
<小时/>

还有其他人经历过类似的事情或者可以识别我的代码的问题吗?谢谢!

最佳答案

您可以使用此代码

[tableView performSelector:@selector(reloadData) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES];

相反

[tableView reloadData];

关于iphone - NSURLConnection 在 UITableView 滚动之前不是 "firing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3003479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com