Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete a UICollectionViewCell from the cell

I have a method that calls the below code within a UICollectionViewCell. The cell has a reference both to the UICollectionView and to the array that it is based off of. The below code fails with the error:

2014-11-20 13:41:08.976 MyApp[954:304515] *** Assertion failure in -[UICollectionView _endItemAnimations], /SourceCache/UIKit/UIKit-3318.16.14/UICollectionView.m:3917
2014-11-20 13:41:08.978 MyApp[954:304515] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of items in section 0.  The number of items contained in an existing section after the update (1) must be equal to the number of items contained in that section before the update (1), plus or minus the number of items inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).'
*** First throw call stack:
(0x22f09d67 0x30768c77 0x22f09c3d 0x23bdcaa9 0x2656863d 0xe8e50 0xe8fa8 0x2680bcc1 0x23c10dc9 0x22ed0517 0x22ed0099 0x22ece303 0x22e1b981 0x22e1b793 0x2a1f4051 0x2640d981 0x1138f4 0x113930 0x30d04aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException

The Code

//Resolves cell deletion
    func deleteMe()
            var path = collectionView.indexPathForCell(self)!
            collectionArray.removeAtIndex(path.row)
            collectionView.deleteItemsAtIndexPaths([path])
    }

How do I delete this cell?

like image 400
steventnorris Avatar asked Nov 20 '14 19:11

steventnorris


1 Answers

In this case, when assigning collectionArray or collectionView (I didn't test to see which, but my bet is on collectionArray) it was not an inout reference, but rather a copy. Array's have some odd functionality like this for performance issues. If I passed in a reference to the whole parent view (serviceView) and accessed using

serviceView.collectionArray.removeAtIndex(path.row)
serviceView.collectionView.deleteItemsAtIndexPaths([path])

it works fine. The datasource and the displayed cells were mismatched because the array was not being edited, a copy was.

like image 138
steventnorris Avatar answered Sep 19 '22 15:09

steventnorris