@@ -26,6 +26,7 @@ export * from './collectionview-common';
2626const infinity = layout . makeMeasureSpec ( 0 , layout . UNSPECIFIED ) ;
2727
2828
29+ const main_queue = dispatch_get_current_queue ( ) ;
2930
3031export enum ContentInsetAdjustmentBehavior {
3132 Always = UIScrollViewContentInsetAdjustmentBehavior . Always ,
@@ -248,9 +249,11 @@ export class CollectionView extends CollectionViewBase {
248249 if ( Trace . isEnabled ( ) ) {
249250 CLog ( CLogTypes . info , 'deleteItemsAtIndexPaths' , indexes . count ) ;
250251 }
251- view . performBatchUpdatesCompletion ( ( ) => {
252- view . deleteItemsAtIndexPaths ( indexes ) ;
253- } , null ) ;
252+ dispatch_async ( main_queue , ( ) => {
253+ view . performBatchUpdatesCompletion ( ( ) => {
254+ view . deleteItemsAtIndexPaths ( indexes ) ;
255+ } , null ) ;
256+ } ) ;
254257 return ;
255258 }
256259 case ChangeType . Update : {
@@ -259,10 +262,12 @@ export class CollectionView extends CollectionViewBase {
259262 if ( Trace . isEnabled ( ) ) {
260263 CLog ( CLogTypes . info , 'reloadItemsAtIndexPaths' , event . index , indexes . count ) ;
261264 }
262- UIView . performWithoutAnimation ( ( ) => {
263- view . performBatchUpdatesCompletion ( ( ) => {
264- view . reloadItemsAtIndexPaths ( indexes ) ;
265- } , null ) ;
265+ dispatch_async ( main_queue , ( ) => {
266+ UIView . performWithoutAnimation ( ( ) => {
267+ view . performBatchUpdatesCompletion ( ( ) => {
268+ view . reloadItemsAtIndexPaths ( indexes ) ;
269+ } , null ) ;
270+ } ) ;
266271 } ) ;
267272
268273 return ;
@@ -275,36 +280,39 @@ export class CollectionView extends CollectionViewBase {
275280 if ( Trace . isEnabled ( ) ) {
276281 CLog ( CLogTypes . info , 'insertItemsAtIndexPaths' , indexes . count ) ;
277282 }
278- view . performBatchUpdatesCompletion ( ( ) => {
279- view . insertItemsAtIndexPaths ( indexes ) ;
280- } , null ) ;
283+ dispatch_async ( main_queue , ( ) => {
284+ view . performBatchUpdatesCompletion ( ( ) => {
285+ view . insertItemsAtIndexPaths ( indexes ) ;
286+ } , null ) ;
287+ } ) ;
281288 // Reload the items to avoid duplicate Load on Demand indicators:
282289 return ;
283290 }
284291 case ChangeType . Splice : {
285- view . performBatchUpdatesCompletion ( ( ) => {
286- if ( event . addedCount > 0 ) {
287- const indexes = NSMutableArray . alloc < NSIndexPath > ( ) . init ( ) ;
288- for ( let index = 0 ; index < event . addedCount ; index ++ ) {
289- indexes . addObject ( NSIndexPath . indexPathForItemInSection ( event . index + index , 0 ) ) ;
290- }
291- view . insertItemsAtIndexPaths ( indexes ) ;
292- }
293- if ( event . removed && event . removed . length > 0 ) {
294- const indexes = NSMutableArray . new < NSIndexPath > ( ) ;
295- for ( let index = 0 ; index < event . removed . length ; index ++ ) {
296- indexes . addObject ( NSIndexPath . indexPathForItemInSection ( event . index + index , 0 ) ) ;
292+ dispatch_async ( main_queue , ( ) => {
293+ view . performBatchUpdatesCompletion ( ( ) => {
294+ if ( event . addedCount > 0 ) {
295+ const indexes = NSMutableArray . alloc < NSIndexPath > ( ) . init ( ) ;
296+ for ( let index = 0 ; index < event . addedCount ; index ++ ) {
297+ indexes . addObject ( NSIndexPath . indexPathForItemInSection ( event . index + index , 0 ) ) ;
298+ }
299+ view . insertItemsAtIndexPaths ( indexes ) ;
297300 }
298- this . unbindUnusedCells ( event . removed ) ;
299- if ( Trace . isEnabled ( ) ) {
300- CLog ( CLogTypes . info , 'deleteItemsAtIndexPaths' , indexes . count ) ;
301+ if ( event . removed && event . removed . length > 0 ) {
302+ const indexes = NSMutableArray . new < NSIndexPath > ( ) ;
303+ for ( let index = 0 ; index < event . removed . length ; index ++ ) {
304+ indexes . addObject ( NSIndexPath . indexPathForItemInSection ( event . index + index , 0 ) ) ;
305+ }
306+ this . unbindUnusedCells ( event . removed ) ;
307+ if ( Trace . isEnabled ( ) ) {
308+ CLog ( CLogTypes . info , 'deleteItemsAtIndexPaths' , indexes . count ) ;
309+ }
310+ view . performBatchUpdatesCompletion ( ( ) => {
311+ view . deleteItemsAtIndexPaths ( indexes ) ;
312+ } , null ) ;
301313 }
302- view . performBatchUpdatesCompletion ( ( ) => {
303- view . deleteItemsAtIndexPaths ( indexes ) ;
304- } , null ) ;
305- }
306- } , null ) ;
307-
314+ } , null ) ;
315+ } ) ;
308316 return ;
309317 }
310318 }
@@ -354,7 +362,9 @@ export class CollectionView extends CollectionViewBase {
354362
355363 // TODO: this is ugly look here: https://github.com/nativescript-vue/nativescript-vue/issues/525
356364 // this.clearRealizedCells();
357- this . nativeViewProtected . reloadData ( ) ;
365+ dispatch_async ( main_queue , ( ) => {
366+ this . nativeViewProtected . reloadData ( ) ;
367+ } ) ;
358368
359369 const args = {
360370 eventName : CollectionViewBase . dataPopulatedEvent ,
@@ -613,7 +623,7 @@ export class CollectionView extends CollectionViewBase {
613623 }
614624
615625 collectionViewNumberOfItemsInSection ( collectionView : UICollectionView , section : number ) {
616- return this . items ? this . items . length : 0 ;
626+ return this . items ?. length || 0 ;
617627 }
618628
619629 collectionViewCellForItemAtIndexPath ( collectionView : UICollectionView , indexPath : NSIndexPath ) : UICollectionViewCell {
0 commit comments