0

我在将 json 文件中的图像加载到 UIImage - Xcode 中的表格单元格中时遇到了一些困难。我试图将图像从服务器加载到 NSArray 中,然后填充表格视图 UIImage 单元格。我在这里缺少什么吗?

图像位于 SQL 服务器上。

谢谢您的帮助。

这是从 PHP 到 Xcode 的服务器输出。(封面图片)

(
    "13497074790148.jpeg",
    "13494650900147.png",
    "13494606630147.png",
    "13494605220147.jpeg",
    "13494602920147.jpeg",
    "13494601850147.jpeg",
    "13491916300147.jpeg"
)

这是Xcode中的代码

NSArray *itemsimages = [[NSArray alloc]initWithArray:[results valueForKeyPath:@"cover_image"]];
self.itemImages = itemsimages;

这是表格单元格中的代码

UIImage *imageitm = [UIImage imageNamed: [self.itemImages objectAtIndex: [indexPath row]]];
cell.itmImage.image = imageitm;
return cell;
4

3 回答 3

1

您没有将这些图像存储在本地,因此它没有任何要显示的图像。我建议使用SDWebImage从远程位置 + 缓存机制提供异步图像加载。

于 2012-10-26T14:53:51.497 回答
1
-(void) viewDidLoad
{

NSURL *url = [NSURL URLWithString:@"YOUR URL"];

NSData *data = [NSData dataWithContentsOfURL:url];

    NSError *error;

    NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    NSMutableArray *img = [[NSMutableArray alloc]init];
    NSArray *websiteDetails = (NSArray *) [json objectForKey:@"logos"];

    for(int count=0; count<[websiteDetails count]; count++)
    {
        NSDictionary *websiteInfo = (NSDictionary *) [websiteDetails objectAtIndex:count];
        imagefile = (NSString *) [websiteInfo objectForKey:@"image_file"];
        if([imagefile length]>0)
        {
            NSLog(@"Imagefile URL is: %@",imagefile);
            [img addObject:imagefile];
        }
    }
    //NSarray listofURL
    listofURL = img;
}



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

    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];

    dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //this will start the image loading in bg
    dispatch_async(concurrentQueue, ^{

        NSURL *url = [NSURL URLWithString:[listofURL objectAtIndex:indexPath.row]];
        NSData *image = [[NSData alloc] initWithContentsOfURL:url];

        //this will set the image when loading is finished
        dispatch_async(dispatch_get_main_queue(), ^{

            cell.imageView.image = [UIImage imageWithData:image];
        });
    });
    }
    return cell;
}
于 2014-03-10T09:17:40.053 回答
0

您需要在 json 响应中有一个正确的 url,或者您可以将 url 的公共部分存储在代码本身中,稍后将其附加到从服务器返回的图像名称中。我在相同的条件下做了如下

    __autoreleasing NSError* error = nil;
    id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    NSDictionary *dict = ((NSDictionary *) result)[@"result"];

    NSString *url = dict[@"imageURL"];

    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
    UIImage *image = [[UIImage alloc] initWithData:imageData];

    [_buttonImageView setImage:image forState:UIControlStateNormal];

其中 data 是从服务器返回的响应。

于 2012-10-26T15:12:22.453 回答