2016-03-28 44 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