2015-08-04 2 views
0

У меня есть коллекция из 20 элементов, хранящихся в массиве изображений. Я удалить выбранные элементы с помощью этого кода:правильный способ удаления элементов в виде коллекции

  self.collectionView.performBatchUpdates({ 
      let selectedItems = self.collectionView.indexPathsForSelectedItems()! 
      self.picturesObject.deleteItemsAtIndexPaths(selectedItems) 
      self.collectionView.deleteItemsAtIndexPaths(selectedItems) 

      }, completion: {_ in}) 

это реализация deleteItemsAtIndexPaths picturesObject в:

func deleteItemsAtIndexPaths(indexPaths:[NSIndexPath]){ 
     for indexPath in indexPaths{ 
      pictures.removeAtIndex(indexPath.item) 
     } 
    } 

Проблема я столкнулся, заключается в следующем. Каждый раз, когда выбранный элемент в виде коллекции удаляется, массив изображений становится меньше. Если я удалю первый элемент, чем массив изображений, то будет только 19 предметов. Если я чем пытаюсь удалить элемент номер 20 в представлении коллекции, индекс массива выходит за рамки, потому что массив изображений теперь всего 19 объектов большой, но я хотел удалить 20-й объект, хранящийся в indexpath.item.

Каков правильный способ удаления элементов в виде коллекции?

EDIT: методы вид /// коллекция

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
     collectionView.allowsMultipleSelection = true 

     return 1 
    } 

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return picturesObject.pictures.count 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! ShopCell 
     cell.imageView.image = picturesObject.pictures[indexPath.item] 

     return cell 
    } 
+0

Привет, я думаю, вы удаляете изображение в своем массиве, но ваш делегат-делегат dataSource хранит 20 элементов в памяти. Можете ли вы вставить свои методы делегирования collectView? – Masterfego

+0

Там вы идете. Я редактировал свой вопрос. Я думаю, что они являются источниками данных, у них нет других. – brumbrum

ответ

2

Перед перекручивание через массив в deleteItemsAtIndexPaths, сортировать ваш indexPaths в порядке убывания. Затем, если вы удалите номер позиции 19, гарантированное количество будет меньше 19.

+0

Я не уверен, если пойму. Можете ли вы привести пример? Должен ли я каким-то образом обновлять indexPaths ячеек в коллекцииView? Я также удаляю несколько выбранных элементов одновременно. – brumbrum

+1

У вас есть 20 предметов с номерами от 0 до 19. Если сначала удалить 0, то удаление 19 приведет к сбою, потому что его больше нет. Если вы сначала удалите 19, все будет хорошо, когда вы удалите 0. Таким образом, если вы сортируете 'indexPaths', так что при прохождении через них используются более высокие значения' indexPath.item' перед более низкими, вы избегаете этой проблемы. –

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