2012-12-17 10 views
6

कुछ घटनाओं पर,सभी वस्तुओं को कैसे हटाएं और UICollectionView में नए आइटम कैसे जोड़ें?

मैं एक uicollectionview में सभी कक्षों को निकालें, और नई कोशिकाओं जोड़ें। (जो एक नेटवर्क कॉल की वजह से से भरी हुई होगी) को

मैं deleteItemsAtIndexPaths उपयोग करने की कोशिश करना चाहते हैं। पुनः लोड करेंक्शन, हटाएंक्शन/सम्मिलित करेंक्शन।

उनमें से प्रत्येक ने मेरे ऐप को क्रैश कर दिया।

नीचे मेरा कोड है।

NSMutableArray* indexPathArray = [[NSMutableArray alloc] init]; 

for(int i=0; i < [self.jsonAlbumImageArray count]; ++i) 
{ 
    NSIndexPath* newPath = [NSIndexPath indexPathForRow:i inSection:0]; 
    [indexPathArray addObject: newPath]; 
} 

[self.jsonAlbumImageArray removeAllObjects]; 

if(indexPathArray.count > 0) 
{ 
    [self.collectionView performBatchUpdates:^{ 
      [self.collectionView deleteItemsAtIndexPaths:indexPathArray]; 
     } 
    completion: nil]; 
} 

// NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)];                                               
// NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:0];                                                     
// [self.collectionView reloadSections:indexSet];                                                       

[self get_IMAGE_LIST_FROM_SERVER]; 
+1

उपयोग '[collectionView reloadData]' –

उत्तर

4

हाँ, के रूप में जोनाथन ने कहा, मुझे लगता है कि आप क्या करना चाहते हैं नए डेटा से अपने डेटा स्रोत बदल सकते हैं और बस "ताज़ा" या UICollectionView पुनः लोड है।

+0

क्या आप कह यदि आप स्पष्ट अपने डेटा पूरी तरह से स्रोत और कर एक '' '[collectionView reloadData]' '' एप्लिकेशन क्रैश नहीं करेंगे और संग्रह दृश्य होगा तो को मंजूरी दे दी? – Supertecnoboff

+0

यदि "अपने डेटा स्रोत को साफ़ करें" से आपका मतलब है कि इसे 0 गिनती ऑब्जेक्ट बनाएं, तो हां, यह वही होगा जो वास्तव में होगा। हालांकि, अगर आप इसे "शून्य" बनाते हैं तो आपको अप्रत्याशित परिणाम मिल सकते हैं, भले ही आप तेजी से या obj-c का उपयोग कर रहे हों। –

+1

बहुत बढ़िया धन्यवाद ट्रैविस और हाँ, मेरा मतलब यही है :) – Supertecnoboff

6

बस अगर आपको [संग्रह दृश्य रीलोडडाटा] द्वारा प्रदान की गई एक चिकनी एनीमेशन की आवश्यकता है तो आप इसे सम्मिलित और हटाए गए तरीकों से कर सकते हैं, यहां एक नमूना है।

-(void)deleteItemsFromDataSourceAtIndexPaths:(NSArray *)itemPaths 
{ 
    NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; 
    for (NSIndexPath *itemPath in itemPaths) { 
     [indexSet addIndex:itemPath.row]; 
    } 
    [self.apps removeObjectsAtIndexes:indexSet]; 
} 

-(void)insertItems:(NSArray*)items ToDataSourceAtIndexPaths:(NSArray *)itemPaths 
{ 
    NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; 
    for (NSIndexPath *itemPath in itemPaths) { 
     [indexSet addIndex:itemPath.row]; 
    } 
    [self.apps insertObjects:items atIndexes:indexSet]; 
} 

-(void)reloadDataSmooth{ 
     [self.collectionView performBatchUpdates:^{ 

      NSMutableArray *arrayWithIndexPathsDelete = [NSMutableArray array]; 
      NSMutableArray *arrayWithIndexPathsInsert = [NSMutableArray array]; 

      int itemCount = [self.items count]; 

      for (int d = 0; d<itemCount; d++) { 
       [arrayWithIndexPathsDelete addObject:[NSIndexPath indexPathForRow:d inSection:0]]; 
      } 
      [self deleteItemsFromDataSourceAtIndexPaths:arrayWithIndexPathsDelete]; 
      [self.collectionView deleteItemsAtIndexPaths:arrayWithIndexPathsDelete]; 

      int newItemCount = [newItems count]; 

      for (int i=0; i<newAppCount; i++) { 
       [arrayWithIndexPathsInsert addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 
      } 
      [self insertItems:newItems ToDataSourceAtIndexPaths:arrayWithIndexPathsInsert]; 

      [self.collectionView insertItemsAtIndexPaths:arrayWithIndexPathsInsert]; 
     } 
     completion:nil]; 
    } 
} 
+1

यहां 'self.apps' क्या है? –

+0

@TejaswiYerukalapudi संग्रह कैल्स की एक सरणी (mutable) – Emilio