2014-06-27 75 views
1

所以我對我的SpecialOfferCell.hNSMutableArray的定製電池實現問題

#import <UIKit/UIKit.h> 
#import "AFImagePager.h" 
@interface SpecialOfferCell : UITableViewCell<AFImagePagerDataSource,AFImagePagerDelegate> 
@property (nonatomic, retain) NSMutableArray *arrayImages; 
@property (nonatomic) NSInteger offer_id; 
-(void)loadImages; 
@property (weak, nonatomic) IBOutlet AFImagePager *imageIcons; 
@property (weak, nonatomic) IBOutlet UILabel *titleLabel; 
@property (weak, nonatomic) IBOutlet UILabel *descLabel; 

@end 

此代碼,這是實現文件

#import "SpecialOfferCell.h" 

@implementation SpecialOfferCell 
@synthesize arrayImages; 
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
if (self) { 

} 
return self; 
} 

- (void)awakeFromNib 
{ 
// Initialization code 
self.imageIcons.delegate=self; 
self.imageIcons.dataSource=self; 


} 


-(NSArray*)getArrayImages{ 
return [NSArray arrayWithArray:arrayImages]; 
} 
#pragma mark - AFImagePager DataSource 
- (NSArray *) arrayWithImageUrlStrings 
{ 
return [self getArrayImages]; 
} 

- (UIViewContentMode) contentModeForImage:(NSUInteger)image 
{ 
    return UIViewContentModeScaleAspectFill; 
} 
- (UIImage *) placeHolderImageForImagePager{ 
    return [UIImage imageNamed:@"stub_dashboard"]; 
} 
-(void)loadImages{ 
NSLog(@"offer id :%d",self.offer_id); 
NSLog(@"arrayImages:%d",arrayImages.count); 
@try { 
    if (arrayImages.count==0) { 
     NSError* error; 
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ; 
     [request setURL:[NSURL URLWithString:[appConfig URL_GET_OFFER_GALLERY]]]; 

     NSString *post = [NSString stringWithFormat:@"{\"hotel_id\":\"%@\",\"key\":\"%@\",\"offer_id\":%ld}",@"ayodya",[appConfig API_KEY],(long)_offer_id]; 
     NSLog(@"%@",post); 
     NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 
     NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 
     [request setHTTPMethod:@"POST"]; 
     [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
     [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; // multipart/form-data 
     [request setHTTPBody:postData]; 


     NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
     //NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
     //NSLog(@"%@",returnString); 
     NSDictionary* json = [NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error]; 
     arrayImages=[[NSMutableArray alloc]init]; 
     NSMutableArray *arrayImagesTemp=[[NSMutableArray alloc]init]; 
     arrayImagesTemp=[json objectForKey:@"galeries"]; 
     for (int i=0; i<arrayImagesTemp.count; i++) { 
      NSDictionary * Object=[[NSDictionary alloc]init]; 
      Object=[arrayImagesTemp objectAtIndex:i]; 
      [arrayImages addObject:[Object objectForKey:@"image"]]; 
     } 
     [self.imageIcons reloadData]; 

    } 

} 
@catch (NSException *exception) { 

} 
} 

@end 

所以,當我打電話在此的UITableViewController自定義單元格的使用之前已經使用過的數組的數組圖像,所以當初始化新的單元格時,數組不會刷新。這是爲什麼?是因爲dequeueReusableCellWithIdentifier?

數據來源:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSDictionary * Object=[[NSDictionary alloc]init]; 
Object=[array objectAtIndex:indexPath.row]; 
static NSString *CellIdentifier = @"SpecialOfferCell"; 
SpecialOfferCell *cell = (SpecialOfferCell *)[tableView 
             dequeueReusableCellWithIdentifier:CellIdentifier]; 

cell.titleLabel.text=[Object objectForKey:@"offer_title"]; 
[cell setOffer_id:[[Object objectForKey:@"offer_id"]integerValue]]; 

[cell performSelectorInBackground:@selector(loadImages) withObject:nil]; 

return cell; 
} 

那麼,我要在這裏實現的是,當細胞已加載的圖片,它不會再次加載。 TableView

+0

嗨,你可以請粘貼你的表視圖數據源實現代碼嗎? –

+1

嗨@NagaMalleshMaddali我已經更新了代碼。謝謝。 – xeravim

回答

0

在你SpecialOfferCell你需要在這裏實現prepareForReuse您可以重置任何數據的圖像陣列

+0

但重置數據將導致重複調用loadImages方法。在我的情況下,在第三個單元格後。什麼是最好的方法呢?謝謝。 – xeravim

0

首先,如,這部分代碼是沒用的:

if (cell == nil) 
{ 
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
} 

您應該創建新的細胞,而不是再次出院。

我不知道你真的想達到什麼目的。有兩種選擇:

  1. prepareForReuse中,您可以刪除圖像以使用loadImages再次加載它們。
  2. 您不會刪除圖像 - 在這種情況下,當單元格被重用時,它具有先前加載的圖像,因此基本上是隨機的。

但是如果你需要加載從服務器映像只有一次,你可以創建詞典並在loadImages檢查每次如果你的圖片已經被加載並從你的字典中得到它們。我理解它嗎?

+0

單元格的每個部分都包含不同的圖像,所以我在這裏使用了AFImagePager,因此我根據它的offer_id將每個offer_id的id傳遞給SpecialOfferCell.m以加載圖像。解決方案1,我不打算刪除圖像,我想要的只是當所有圖像加載到每個單元格時,它不會再加載圖像。解決方案2中,第三個單元格將包含來自第一個單元格的圖像。 – xeravim

+0

因此,你需要做的是在某些字典中保持對圖像數組的引用,其中鍵是你的提供名稱或其他唯一標識符(例如indexPath),在'loadImages'中,你嘗試從字典中加載它們並加載它們服務器時,字典[yourKey]爲空。我是否正確理解你的問題? –