1

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

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

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

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

Есть ли что-то, что я должен был сделать, чтобы предотвратить перезапуск 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 
    ... 
} 
+0

Есть ли причина, по которой вы не загружаете контент в viewDidLoad? – rdelmar

+0

Хороший вопрос. Мне нужно регулярно обновлять контент. Лучший способ, который я нашел, - это поместить его в viewdidappear. Кроме того, если я удалю элемент на странице подробностей, я хочу, чтобы список обновлялся. смысл? – mday

+0

Вы не можете вызвать viewDidAppear. Покажите свой код. Проверьте, загружен ли он. Переместить в viewFidLoad. – Wain

ответ

2

В вашем методе queeryData, ноль из массива первого

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

Move метод Alloc/инициализации для _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]; 
    }]; 
} 
+0

Это сделало. Глупая ошибка с моей стороны. Благодарю. – mday

-2

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

Смежные вопросы