Проблема с IndexPath.row - PullRequest
       2

Проблема с IndexPath.row

1 голос
/ 21 августа 2011

У меня есть 60 строк в табличном представлении. У меня есть массив, названный "BundleImagesArray" с 60 именами изображений пакета. Так что я извлекаю изображения из пакета и создаю для него миниатюру. При каждом связывании каждой ячейки в первый раз я сохраняю миниатюрные изображения в массиве, так как включаю быструю прокрутку после привязки каждой ячейки. Я использую изображения из массива (без повторного создания эскиза). Однако массив imageCollection (в котором будут храниться миниатюры изображений) иногда беспорядок

Индекс path.row идет как 1,2 ..... 33,34,50,51..etc

это не последовательный порядок. Поэтому у меня проблемы с массивом imageCollection, который используется для хранения и извлечения изображений в соответствии с индексным путем. Могу я знать причину этого. Любой может дать мне хорошее решение для этого. Есть ли способ получить 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 ]

1 голос
/ 21 августа 2011

Получение таблицы для вызова вас в определенном порядке не является правильным решением. Вы должны быть в состоянии предоставить любую необходимую ячейку в любом порядке.

Я думаю, проблема в том, что вы используете массив и пытаетесь получить доступ к индексам, которые еще не существуют. Вы можете использовать NSMutableDictionary для вашего imageCollectionArrays (вместо NSArray) и хранить там свои данные, вводимые по строке (или NSIndexPath). Они вы можете добавить или получить их в любом порядке.

0 голосов
/ 21 августа 2011

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];

Попробуйте, посмотрите, работает ли оно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...