Torna su Controller di navigazione Cause Le raccolte Visualizza gli elementi da duplicare
-
21-12-2019 - |
Domanda
Penso che questa sia probabilmente una semplice correzione, ma sto lottando per trovare la soluzione giusta Ho quanto segue:
ContactList - A UICollectionView
che carica il contenuto con il metodo viewDidAppear:
.Quando un articolo è selezionato nella visualizzazione della raccolta, licenziare questo metodo:
[self performSegueWithIdentifier:@"pushContactDetail" sender:self];
.
finora così buono.Tutto funziona alla grande.Tuttavia, quando navigo indietro dalla pagina ContactDetail utilizzando il pulsante Controller di navigazione La mia contactlist duplica il contenuto.
C'è qualcosa che dovrei fare per impedire che il viewDidAppear:
da correre di nuovo?
Non penso che voglio impostare la raccolta in NIL quando spingo la pagina ContactDetail in quanto ciò causerebbe il ricaricato il contenuto ogni volta ...
Ecco il codice:
-(void) viewDidAppear
{
[super viewDidAppear];
[self.view setBackgroundColor:myColorLightGrey];
_contactList = [[NSMutableArray alloc] init];
[self displayLoadingAndDisableTableViewInteractions];
[self queryData];
}
- (void) queryData
{
//Find the Data
PFQuery *query = [PFUser query];
PFUser *consumer = [PFUser currentUser];
[query includeKey:User_followers];
[query whereKey:@"email" equalTo:consumer.email];
query.maxCacheAge = 60 * 60 * 24; // One day, in seconds
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
for (PFUser *tmpConsumer in objects)
{
for (PFUser *publisher in [tmpConsumer objectForKey:User_followers])
{
[_contactList addObject:publisher];
}
}
[_collectionView reloadData];
[self hideLoadingAndEnableTableViewInteractions];
}];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"contactCell";
ContactCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
//SNIPPED REMAINDER OF CODE
...
}
. Soluzione
Nel tuo metodo queryData
, Nil Out The Array First
_contactList = nil;
_contactList = [NSMutableArray array]; // or [[NSMutableArray alloc] init];
.
Sposta il metodo ALLOC / INIT per _contactList
come questo:
- (void) queryData
{
_contactList = nil;
_contactList = [[NSMutablArray alloc] init];
//Find the Data
PFQuery *query = [PFUser query];
PFUser *consumer = [PFUser currentUser];
[query includeKey:User_followers];
[query whereKey:@"email" equalTo:consumer.email];
query.maxCacheAge = 60 * 60 * 24; // One day, in seconds
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
for (PFUser *tmpConsumer in objects)
{
for (PFUser *publisher in [tmpConsumer objectForKey:User_followers])
{
[_contactList addObject:publisher];
}
}
[_collectionView reloadData];
[self hideLoadingAndEnableTableViewInteractions];
}];
}
. Altri suggerimenti
naviga indietro con animazione true.Risolverà il tuo problema.