2015-06-18 4 views
0

Я пытаюсь удалить серию выбранных изображений в UICollectionView при нажатии кнопки «Удалить». Вот мое действие Удалить Кнопку:Ошибка SIGABRT при попытке удалить несколько выбранных ячеек в UICollectionView:

- (IBAction)deleteVideos:(id)sender { 
    if(deleteEnabled){ 
     if([selectedVideos count]>0){ 
      for(NSArray *indexPath in self.memoryMirrorSessionCollectionView.indexPathsForSelectedItems) { 
       [videoImagesArray removeObjectAtIndex:indexPath]; 
       [image_array removeObjectAtIndex: indexPath]; 
       NSLog(@"%@", indexPath); 
       [self.memoryMirrorSessionCollectionView deleteItemsAtIndexPaths:indexPath]; 
      } 
     } 
    } 
} 

И это мои заявления и определение:

@interface XVZUICollectionController(){ 
    NSMutableArray *videoImagesArray; 
    BOOL selectEnabled; 
    NSMutableArray *selectedVideos; 
    BOOL deleteEnabled; 
    BOOL shareEnabled; 
    NSInteger *indexStack; 
} 

- (void)viewDidLoad { 
    image_array = [NSMutableArray arrayWithObjects:  @"TestImage1.jpg", @"TestImage2.png", @"TestImage3.jpg", @"TestImage4.png",@"TestImage5.jpg", @"TestImage2.png",@"TestImage1.jpg", @"TestImage5.jpg", nil ]; 
    videoImagesArray = [NSMutableArray arrayWithObjects: image_array, nil]; 
} 

При нажатии на кнопке удаления, я получаю сигнал аварийного прекращения исключения на выделенную строку ниже. Какие-либо предложения?

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     **return UIApplicationMain(argc, argv, nil, NSStringFromClass([NMAppDelegate class]));** //SIGABRT 
    } 
} 
+0

Предоставить подробную информацию о катастрофе. Также см. Http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1, чтобы узнать, как отладить сбой. – rmaddy

ответ

0

Ваш for цикл структурирован неправильно.

Вы повторно получаете ссылку NSArray, но затем используете это как целое число в своих вызовах удаления.

Вы должны получить выбранные пути индекса один раз, а затем перебрать выбранные пути -

- (IBAction)deleteVideos:(id)sender { 
    if(deleteEnabled){ 
     if([selectedVideos count]>0){ 
      NSArray *selectedIndexPaths=self.memoryMirrorSessionCollectionView.indexPathsForSelectedItems; 
      for(NSIndexPath *indexPath in selectedIndexPaths) { 
       [videoImagesArray removeObjectAtIndex:indexPath.item]; 
       [image_array removeObjectAtIndex: indexPath,item]; 
       NSLog(@"%d", indexPath.item); 
       [self.memoryMirrorSessionCollectionView deleteItemsAtIndexPaths:indexPath]; 
      } 
     } 
    } 
} 
+0

Я все еще получаю исключение sigabrt .. и добавление точки останова .. его прерывание в NSArray * selectedIndexPaths = self.memoryMirrorSessionCollectionView.indexPathsForSelectedItems; , В любом случае, я могу посмотреть, как узнать, почему это происходит? – PS1690

+0

Установите точку останова на этой строке и убедитесь, что 'self.memoryMirrorSessionCollectionView' действителен. Также попробуйте установить контрольную точку исключения. – Paulw11

+0

Я думаю, что PS1690 правильно структурировал цикл for. Этот цикл for называется быстрым перечислением, которое подтверждает протокол NSFastEnumeration, который вызывает функцию один раз. Обычно исключение sigabrt возникает, когда вы получаете доступ к элементу n + 1 из массива, который имеет только n элементов. – selva

Смежные вопросы