我在表视图中有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;
}
答案 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];
试试看,看看它是否有效。