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
    ...
}
.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top