При включении контроллера навигации элементы представления коллекции дублируются.

StackOverflow https://stackoverflow.com//questions/20021210

Вопрос

Я думаю, что это, вероятно, простое исправление, но я изо всех сил пытаюсь найти правильное решение, которое у меня есть следующее:

Список контактов - а UICollectionView который загружает контент с помощью viewDidAppear: метод.Когда элемент выбран в представлении коллекции, я запускаю этот метод:

[self performSegueWithIdentifier:@"pushContactDetail" sender:self];

Все идет нормально.Все работает отлично.Однако когда я возвращаюсь со страницы ContactDetail с помощью кнопки контроллера навигации, мой список контактов дублирует содержимое.

Есть ли что-то, что мне следует сделать, чтобы предотвратить viewDidAppear: от бега снова?

Я не думаю, что хочу устанавливать нулевое значение коллекции, когда я нажимаю страницу ContactDetail, поскольку это приведет к перезагрузке содержимого каждый раз...

Вот код:

-(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
    ...
}
Это было полезно?

Решение

В вашей queryData метод, сначала обнуляем массив

_contactList = nil;
_contactList = [NSMutableArray array]; // or [[NSMutableArray alloc] init];

Переместите метод alloc/init для _contactList так:

- (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];
    }];
}

Другие советы

Перейдите назад с анимацией true.Это решит вашу проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top