IndexPath.row的问题

时间:2011-08-20 21:52:44

标签: iphone objective-c xcode uitableview

我在表视图中有60行。我有一个名为“BundleImagesArray”的数组,其中有60个包图像名称。所以我从包中检索图像并为其创建缩略图。 每当第一次绑定每个单元格时,我将缩略图图像存储到数组中。因为在绑定每个单元格后启用快速滚动。我正在利用阵列中的图像(不再创建缩略图)。但是,imageCollection数组(这将存储缩略图)有时是无序的

指数path.row将以1,2 ..... 33,34,50,51..etc

的形式出现

它不是一个连续的顺序。所以我的imageCollection数组出了问题,该数组用于根据索引路径存储和检索图像。我知道是什么原因。任何人都能为我提供一个好的解决方案对于this.is有什么方法可以将indexpath.row作为顺序执行?

我的cellForRowAtIndexPath代码是:

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

     NSLog(@"IndexPath Row%d",indexPath.row);
     static NSString *CellIdentifier = @"Cell";

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

      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     }    


     if ([cell.contentView subviews])
     {
      for (UIView *subview in [cell.contentView subviews])
      {
       [subview removeFromSuperview];
      }
     }

     cell.selectionStyle = UITableViewCellSelectionStyleNone;
     [cell setAccessoryType:UITableViewCellAccessoryNone];

     Class *temp = [BundleImagesArray objectAtIndex:indexPath.row];

     UIImageView *importMediaSaveImage=[[[UIImageView alloc] init] autorelease];
     importMediaSaveImage.frame=CGRectMake(0, 0, 200,135 );
     importMediaSaveImage.tag=indexPath.row+1;
     [cell.contentView addSubview:importMediaSaveImage]; 
     UILabel *sceneLabel=[[[UILabel alloc] initWithFrame:CGRectMake(220,0,200,135)] autorelease];

     sceneLabel.font = [UIFont boldSystemFontOfSize:16.0];
     sceneLabel.textColor=[UIColor blackColor];
     [cell.contentView addSubview:sceneLabel];


    //for fast scrolling
       if([imageCollectionArrays count] >indexPath.row){


        importMediaSaveImage.image =[imageCollectionArrays ObjectAtIndex:indexPath,row];
     }
     else {

//for start activity indicator 
      [NSThread detachNewThreadSelector:@selector(showallstartActivityBundle) toTarget:self withObject:nil];
      NSData *datas = [self photolibImageThumbNailData:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:temp.fileName ofType:@"png" inDirectory:@"Images"]]];

      importMediaSaveImage.image =[UIImage imageWithData:datas]; 

      [imageCollectionArrays addObject:importMediaSaveImage.image];



//to stop activity indicator
      [NSThread detachNewThreadSelector:@selector(showallstopActivityBundle) toTarget:self withObject:nil];
     }





     sceneLabel.text = temp.sceneLabel;

     temp = nil;
     return cell;
    }

2 个答案:

答案 0 :(得分:1)

让tableview按特定顺序给你打电话不是正确的解决方案。您需要能够以任何顺序提供所需的任何单元格。

我认为问题在于您正在使用数组并尝试访问尚不存在的索引。您可以为imageCollectionArrays(而不是NSArray)使用NSMutableDictionary,并将数据存储在那里,按行(或NSIndexPath)键入。您可以按任何顺序添加或检索它们。

答案 1 :(得分:0)

NSArray行来说UITableView完全没问题。这些行是有序的,并且数组也是有序的,所以没有问题。

您的代码中的问题似乎是您正在使用两个数组,一个是不可变的,一个是可变的。您正在向可变数组中添加对象,因此无法准确预测它们的添加位置(因为无法预测将按顺序需要这些行)。

我建议首先用NSMutableArray对象填充[NSNull null],然后将图像插入数组中的特定点:

// during initialization 
for (int i=0; i<numberOfImages; i++) {
    [imageCollectionArrays addObject:[NSNull null]];
}

// in cellForRowAtIndexPath:
[imageCollectionArrays replaceObjectAtIndex:indexPath.row 
    withObject:importMediaSaveImage.image];

试试看,看看它是否有效。