我有一个json数组,我使用以下方法来检索数据:
- (void) retrieveData
{
NSURL * url = [NSURL URLWithString:getDataURL];
NSData * data = [NSData dataWithContentsOfURL:url];
jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
//set up cities array
dronesArray = [[NSMutableArray alloc] init];
//Loop json array
for (int i = 0; i < jsonArray.count; i++)
{
//Create city/drone object
NSString * dID = [[jsonArray objectAtIndex:i] objectForKey:@"id"];
NSString * dName = [[jsonArray objectAtIndex:i] objectForKey:@"droneName"];
NSString * dPic = [[jsonArray objectAtIndex:i] objectForKey:@"dronePic"];
[dronesArray addObject:[[City alloc]initWithDroneName:dName andDronePic:dPic]];
}
}
以上显示细胞正常:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
City * droneObject;
droneObject = [dronesArray objectAtIndex:indexPath.row];
cell.textLabel.text = droneObject.droneName;
//Accessory
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
但它只显示名称,没有图像。图像以URL格式存储,例如sql数据库中的http://www.domain.com/image.jpg。如何导入图像使其看起来像这样的格式:
好的所以我将以下代码添加到cellforrowatindexpath并且它没有做任何事情:
[[cell imageView] setImage: [UIImage imageNamed:droneObject.dronePic]];
答案 0 :(得分:1)
每当您需要从网址下载图像并将其设置为UIImageView时。最好的机制是从URL获取图像并将它们存储在缓存中,并将下载的图像设置为UITableView。
现在,当您滚动tableView时,其内容将被更新,您需要检查是否已下载特定的可见单元格图像,如果已下载,则将其设置为UIImageView,否则从服务器下载。
为了做到这一点,请高效地使用SDWebImage库。这是最值得信赖且易于使用的库。
希望这会对你有所帮助。快乐编码:)
答案 1 :(得分:1)
假设您正在尝试从url字符串中获取图像
NSURL *url = [NSURL URLWithString:droneObject.dronePic];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
[[cell imageView] setImage: [UIImage imageNamed:image]];
答案 2 :(得分:0)
简答:使用AFNetworking
及其UIImageView
类别在imageView
<中设置单元格的cellForRowAtIndexPath:
图像/ p>
答案很长?
没有图片,因为您没有将单元格的imageView
image
属性设置为cellForRowAtIndexPath:
中的任何内容。如果您只使用网址,则可能需要考虑异步加载和设置单元格上的图像,以便在滚动时桌面不会锁定。如果您不熟悉它,这可能是一个棘手的概念。
无论如何,有很多方法可以做到这一点(AFNetworking解决方案可以为您提供开箱即用的功能):
答案 3 :(得分:0)
这就是我做的。您拉取json数据的部分,通过从URL字符串中检索图像来存储图像。
connectionDidFinishLoading
for (int i = 0; i < jsonArray.count; i++)
{
NSDictionary *jsonElement = jsonArray[i];
Movies *newMovie = [[Movies alloc] init];
newMovie.name = jsonElement[@"MovieID"];
NSString *urlString = [NSString stringWithFormat:@"*url of the image*%@", jsonElement[@"fileImage"]];
// www.example.com/img%@, /filename.jpg
NSURL *imageURL = [NSURL URLWithString:urlString];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
newMovie.imageName = image;
[_movies addObject:newMovie];
}
我创建了一个名为Movies的NSObject来存储图像和其他字段。
Movies.h
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) UIImage *imageName;
在我的cellForRowAtIndexPath中,我创建了一个imageview,并将该图像设置为与Movies.h中的UIImage相同。
cellForRowAtIndexPath:
Movies *item = _feedItems[indexPath.row];
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,50,50)];
myImageView.tag = indexPath.row;
myImageView.image = item.imageName;
[myCell addSubview:myImageView];
return myCell;
_feedItems是一个NSArray
- (void)itemsDownloaded:(NSArray *)items
{
_feedItems = items;
[self.listTableView reloadData];
}