2016-03-28 43 views
1

我有一个表格视图单元格,有标签和图像,滚动图像和标签被更改,这是由于单元格出列功能。我试图通过设置imageview为零,但它不起作用。 重复的问题是PinImageView,它从图像数组中获取图像,而不是从URL中获取图像的图像。由于可重用性问题,桌面单元格重复上的图像

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

    static NSString *[email protected]"cellIdentifier"; 
    TripInfoListCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell==nil) { 
     cell=(TripInfoListCell *)[[[NSBundle mainBundle] loadNibNamed:@"TripInfoListCell" owner:self options:nil] firstObject]; 

    } 

    cell.PinImageView.image = nil; 


    NSString *direction=[dict123 valueForKey:@"direction" ] ; 
    NSString *drive_status=[dict123 valueForKey:@"driver_or_rider"]; 

    if((indexPath.row==totalRow-1)&&[direction isEqual:@"From"]) 
    { 
     __weak TripInfoListCell *weakCell = cell; 

     cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
     cell.userNameLabel.text=loggedUser.profile_name; 

     [email protected]"Driver"; 

     if([drive_status isEqual:@"Ride"]) 

     { 
      [email protected]"Driver"; 
      [email protected]"Driver"; //In case of "Rider" "From" name in the last row 
        } 
     else{ 
     [email protected]"You"; 
     } 

     NSString *imagePic = [[NSUserDefaults standardUserDefaults] objectForKey:@"user_image"]; 
    NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:imagePic]]; 

     [cell.userImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

      weakCell.userImageView.image=image; 

     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

      NSLog(@"%@",error); 
     }]; 


    } 
    else if((indexPath.row==totalRow-1)&&[direction isEqual:@"To"]) 

    { 
     cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
     cell.userNameLabel.text=[_tripDetails objectForKey:@"park_name"]; 

     NSString *image=[NSString stringWithFormat:@"%@",[dict123 objectForKey:@"parkBannerImageUrl"]]; 

     [[ImageHandler sharedInstance] getImageFromURL:image withCompletion:^(UIImage *image) { 

      if (image) { 

       [cell.userImageView setImage:image]; 
      } 
     }]; 
    } 
    else 
     if ([tableGoersList count] > indexPath.row) 
     { 

      NSDictionary *goersInfo=[tableGoersList objectAtIndex:indexPath.row]; 

     [[NSUserDefaults standardUserDefaults]setObject:[goersInfo valueForKey:@"user_image_url"] forKey:@"user_image"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 

     __weak TripInfoListCell *weakCell = cell; 

     NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:goersInfo[@"user_image_url"]]]; 

     [cell.userImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

      weakCell.userImageView.image=image; 

     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

      NSLog(@"%@",error); 
     }]; 

     if((indexPath.row==0)&&[direction isEqual:@"To"]) { 

      if([drive_status isEqual:@"Drive"]){ 

      [email protected]"Driver"; 


      cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
      cell.userNameLabel.text=loggedUser.profile_name; 
      [email protected]"You"; 
      } 
      else{ 
      } 
     } 
     else if((indexPath.row==0)&&[direction isEqual:@"From"]) { 

      if([drive_status isEqual:@"Drive"]) 
      { 

      cell.PinImageView.image=[UIImage imageNamed:@"[email protected]"]; 
      cell.userNameLabel.text=[_tripDetails objectForKey:@"park_name"]; 
      [email protected]""; 
      [email protected]""; 

      NSString *image=[NSString stringWithFormat:@"%@",[dict123 objectForKey:@"parkBannerImageUrl"]]; 

      [[ImageHandler sharedInstance] getImageFromURL:image withCompletion:^(UIImage *image) { 

       if (image) { 

        [cell.userImageView setImage:image]; 
       } 
      }]; 
      } 
      else{ 
       NSLog(@"rider from"); 
       [email protected]""; 

      } 

     } 
     else{ 

      imageNameArray = [[NSArray alloc] initWithObjects:@"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]",@"[email protected]",@"[email protected]", nil]; 

      NSString* nameStr=[goersInfo valueForKey:@"name"]; 

      NSArray * nameStrArray = [nameStr componentsSeparatedByString: @"'s"]; 
      nameStr=[nameStrArray objectAtIndex:0]; 
      cell.riderDriverSlNo.text=[NSString stringWithFormat:@"Rider %ld",(long)indexPath.row]; 

      index = [TripInfoVC ifNameExists:_arrName Name:nameStr]; 

      if(index == 0) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:0]]; 
       [_arrName addObject:nameStr]; 

      } 
      if(index == 1) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:1]]; 
      } 
      if(index == 2) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:2]]; 
      } 

      if(index == 3) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:3]]; 
      } 


      if(index == 4) 
      { 
       cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:4]]; 
      } 

      if(index == 5) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:5]]; 
      } 

      if(index == 6) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:6]]; 
      } 

      if(index == 7) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:0]]; 
      } 

      if(index == 8) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:1]]; 
      } 

      if(index == 9) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:2]]; 
      } 

      if(index == 10) 
      { 
      cell.PinImageView.image=[UIImage imageNamed:[imageNameArray objectAtIndex:3]]; 
      } 

     } // this pinImageView is the pin image which is repeated on scrolling 

    return cell; 
} 

请帮我解决这个问题。

回答

0

你可能会面临关闭碰撞。当你声明完成块

[cell.userImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

      weakCell.userImageView.image=image; 

     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

      NSLog(@"%@",error); 
     }]; 

weakCell是指向由UITableView委托所请求的单元对象的指针。它可能会在以后滚动表格时重复使用,并且此时您的完成块可能实际上被调用,因为下载 进程不是即时的。

如何处理?我会使用等UITableViewCell.tag属性来标识什么时候我需要什么样的图像,当时需要单元格,并且它与我试图在完成块运行时将该单元格放置的图像匹配。也许其他一些下载被稍后解雇并覆盖标签属性。

+0

,问题在于“cell.PinImageView.image = [UIImage imageNamed:@”[email protected]“];”这个PinImageView正在从一个数组中获取图像 –

0

您必须通过将代码添加到操作队列上的UICollection cellForRowAtIndexPath方法的委托方法中,以实时或延迟加载的方式实现加载映像。

而且,如果你正在做的UI,你已经把主线程里面的东西,这里是另一个例子:在UICollectionView

延迟加载图像与SDWebImageManager