图像在模拟器中的表视图中加载,但不在设备中加载

时间:2014-12-10 06:33:41

标签: ios objective-c

我从JSON数据中解析图像并在Table View中显示。我在表格视图中显示图像的代码是 -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellidentifier=@"MyCell";
OnlineCell *cell = [tableView dequeueReusableCellWithIdentifier:cellidentifier];

if (cell == nil)
{
cell = [[OnlineCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellidentifier];
}

cell.userLabel.text = [self.allusername objectAtIndex:indexPath.row];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
imageURL    = [self.alluserphoto objectAtIndex:indexPath.row];

img = [UIImage imageWithData:[NSData dataWithContentsOfURL: [NSURL URLWithString:imageURL]]];
    dispatch_async(dispatch_get_main_queue(), ^{


  cell.userIMage.image = img;
  [indicator stopAnimating];
 });
 });
return cell;
}

模拟器输出 -

enter image description here

Device OutPut -

请告诉我如何在设备中获取图片。

enter image description here

4 个答案:

答案 0 :(得分:2)

正如我可以看到两个截图,一个是模拟器,一个是Device,两个图像共同加载在两端模拟器和设备。所以我认为来自网络方面的问题是你的形象。因为如果代码中存在问题,您的代码是正确的,那么在设备中也不会加载两个图像。

请使用后端的第一张加载图像更改图像进行测试,并检查必须加载的图像。为所有响应放置第一个加载的图像,而不是未在设备中加载的护目镜图像。我确定问题在于图像而不是代码。

答案 1 :(得分:1)

调试建议1:在设备上,确保可以访问该图像。您可以尝试在Safari中打开图像。如果safari打开图像,则表示可以访问图像。

调试建议2:如果图像可以访问,请尝试同步加载图像并在您获取所需数据时进行调试(在设备上):

NSURL *url = [NSURL URLWithString:self.photoImagePath]; // Is URL valid?
NSData *imageData = [NSData dataWithContentsOfURL:url]; // Is data nil?
UIImage *image = [UIImage imageWithData:imageData]; // Is image nil?

然后,尝试异步加载图像,如下所示:

__weak UIImageView *weakImgageView = cell.userIMage;
imageURL = [self.alluserphoto objectAtIndex:indexPath.row];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL: [NSURL URLWithString:imageURL]]];

    dispatch_async(dispatch_get_main_queue(), ^{
        weakImgageView.image = image;
        [indicator stopAnimating];
    });
});

希望这有帮助。

答案 2 :(得分:0)

默认图片未正确显示。这是我怀疑的。请检查您是否正确地给出了名称。这可能是个问题。

答案 3 :(得分:-1)

设置默认图像,直到从JSON异步获取图像。

UIImage *img = [UIImage imageNamed:@"default.png"];

当您以异步方式获取图像时,意味着它将取决于图像大小&互联网速度。因此,您只需保留默认图像,直到从服务器完全获取

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCell";
    OnlineCell *cell = (OnlineCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSArray *nib = nil;
    if (cell == nil)
    {
        nib = [[NSBundle mainBundle] loadNibNamed:@"YourCustomCellNibName" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    // Your code


    cell.userLabel.text = [self.allusername objectAtIndex:indexPath.row];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //NSData *imagedata = [NSData dataWithContentsOfURL:[NSURL URLWithString:[self.alluserphoto objectAtIndex:indexPath.row]]];
            NSURL* url = [NSURL URLWithString:[self.alluserphoto objectAtIndex:indexPath.row]];
            NSURLRequest* request = [NSURLRequest requestWithURL:url];

            [NSURLConnection sendAsynchronousRequest:request
                                               queue:[NSOperationQueue mainQueue]
                                   completionHandler:^(NSURLResponse * response,
                                                       NSData * data,
                                                       NSError * error) {
                                       if (!error){
                                           UIImage* image = [[UIImage alloc] initWithData:data];
                                           // do whatever you want with image
                                           if (image) {
                                               dispatch_async(dispatch_get_main_queue(), ^{
                                                   OnlineCell *updateCell = (id)[tableView cellForRowAtIndexPath:indexPath];
                                                   if (updateCell)
                                                       cell.userIMage.image = image;
                                               });
                                           }
                                       }

                                   }];

        });
}