gpt4 book ai didi

objective-c - NSCache 为 UITableView 存储图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:48 25 4
gpt4 key购买 nike

我有一个带有 TableView 的 View Controller 。在表格 View 的每个单元格中,我都有一张从网上获取的图像 - 但其中许多图像具有相同的图像。所以,我目前正在做的是将获取的图像存储在 NSCache 对象中。它是这样发生的:

- (void)fetchAvatarForUser:(NSString *)uid completion:(void (^)(BOOL))compBlock
{
if (!imageCache) {
imageCache = [[NSCache alloc] init];
}
if (!avatarsFetched) {
avatarsFetched = [[NSMutableArray alloc] initWithCapacity:0];
}

if ([avatarsFetched indexOfObject:uid] != NSNotFound) {
// its already being fetched
} else {
[avatarsFetched addObject:uid];
NSString *key = [NSString stringWithFormat:@"user%@",uid];

NSString *path = [NSString stringWithFormat:@"users/%@/avatar",uid];
[crudClient getPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",[operation.response allHeaderFields]);
UIImage *resImage = [UIImage imageWithData:[operation responseData]];
[imageCache setObject:resImage forKey:key];
compBlock(YES);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Got error: %@", error);
compBlock(NO);
}];
}
}

- (UIImage *)getAvatarForUser:(NSString *)uid
{
NSString *key = [NSString stringWithFormat:@"user%@",uid];
NSLog(@"Image cache has: %@",[imageCache objectForKey:key]);
return [imageCache objectForKey:key];

}

imageCache是​​实例变量,avatarsFetched也是,crudClient是AFHTTPClient对象。并且,在 TableView 中:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

PostCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[PostCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

Post *curPost = [displayedPosts objectAtIndex:indexPath.section];

cell.nickname.text = [curPost nickname];

UIImage *avatarImage = [self.delegateRef.hangiesCommunicator getAvatarForUser:curPost.userID];
if (avatarImage) {
cell.avatar.image = avatarImage;
NSLog(@"Its not null");
} else {
cell.avatar.image = [UIImage imageNamed:@"20x20-user-black"];
}
}

self.delegateRef.hangiesCommunicator 以 imageCache 作为实例变量返回对象(这是应用委托(delegate)的保留属性),顶部有两个方法。

当我滚动时,我在控制台中看到@"Its not null",但我没有看到获取的图像,而是默认的 20x20-user-black 图像。有谁知道,为什么会这样?我做错了什么?

谢谢!

最佳答案

您的代码缺少一些东西。我看不到您在哪里调用 hangiesCommunicator 上的 fetchAvatarForUser:completion: 方法,并且您的 tableView:cellForRowAtIndexPath: 方法没有返回单元格,所以我认为您发布的代码不会干净地编译。

关于objective-c - NSCache 为 UITableView 存储图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621819/

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