2015-06-25 4 views
0

Я звоню в два веб-сервиса, и я показываю оба контента в одном представлении таблицы. Поскольку я вызываю асинхронно, я хотел бы загрузить данные в зависимости от того, что входит в первую очередь, и повторить вызов, когда заканчивается второй сервис. Ответ от этих услуг вставлен в их отдельные разделы, и поэтому я сохраняю их в своих соответствующих NSarrays.UITableView перезагружает данные дважды, но не отображает данные правильно

A -> TO Web Service -> Tableview reloadData всякий раз, когда ответ приходит

B -> Для Web Service -> Tableview reloadData всякий раз, когда ответ приходит

-(void)UpdateTable{ 

    if (_firstRequest || _secondRequest){ 
     runningRefresh = false; 
     [self.tableView reloadData]; 
     [self removeLoading]; 
    } 

} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (section == 0){ 
     return 1; 
    } 
    else if (section == 1){ 
     if (!_firstRequest){ 
      return 1; 
     }else{ 
      NSLog(@"SECTION 1"); 
      if ([self._collectionsNewGame isKindOfClass:[NSNull class]] || [self._collectionsNewGame count] == 0){ 
       NSLog(@"0 COUNT"); 
       return 0; 
      } 
      NSLog(@"%ld COUNT",[self._collectionsNewGame count]); 
      return [self._collectionsNewGame count] + 1; 
     } 

    } 
    else if (section == 2){ 
     if (!_thirdRequest){ 
      return 1; 
     }else{ 
      if ([self._collectionsRandom isKindOfClass:[NSNull class]] || [self._collectionsRandom count] == 0){ 
       return 0; 
      } 
      return [self._collectionsRandom count] + 1; 
     } 

    } 
    else return 0; 
    //count number of row from counting array hear cataGorry is An Array 
} 

Я просто читать в cellrowatindexpath и ее отображение ,

Но, когда я это делаю, есть строки, в которых ячейки не появляются и действуют странно. Любая идея, как это сделать?

+0

Вам необходимо предоставить больше кода. В частности, нам нужно увидеть методы 'UITableViewDataSource', которые предоставляют ячейки. – Dima

+0

Начните имя буквой в нижнем регистре и запишите первую букву встроенных слов. [Правила кодирования Apple] (https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html) –

ответ

0

Объединить реакцию этих услуг в одном источнике данных позволяет говорить NSArray если то, что вы хотите только для добавления строк в вашей UITableView вместо reloadData вставки строки, где необходимо с insertRowsAtIndexPaths: withRowAnimation :. Убедитесь, что у вас есть право валидаций

Here is the apple reference

Наконец использовать основную очередь для выполнения UITableview обновления

[self performSelectorOnMainThread:@selector(updateTable) 
        withObject:object 
       waitUntilDone:YES] 

Пропустив YES к waitUntilDone вы блокируете основной поток методы завершили.

Таким же образом вы можете использовать

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
    [self updateTable]; 
}]; 

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

+0

Мой вопрос был не очень ясен, и я сожалею об этом. Ответ от этих услуг вставлен в их отдельные разделы, и поэтому я сохраняю их в своих соответствующих NSarrays. Я не уверен, как использовать ваше решение в этом сценарии? –

+0

Проблема, с которой вы сталкиваетесь, заключается в том, что вы обновляете свой табличный вид асинхронно, это означает, что, хотя служба A выполнена, находится в середине обновления таблицы, нет блокировки для tableView, чтобы она могла завершить обновление, а затем запустить любое обновление из следующий сервис. Теперь, если u использует два разных массива, как вы обрабатываете логику в своих методах UITableViewDataSource? Будет очень полезно, если вы можете поделиться этим кодом, чтобы мы могли это понять. –

+0

Теперь помните, что 'reloadData' удаляет все представления' UITableViewCell' из таблицы. Методы делегата источника данных вызывается, когда таблица перекрашивается. Таким образом, это асинхронная задача, но некоторые методы называются синхронными, поэтому количество разделов, строк и высот строк немедленно обновляется. –

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