2016-08-22 3 views
0

Я создал приложение для чата. Я получил сообщение в этом методе:tableview reload данные не работают после фона приложение

-(void)msgRecevied:(NSMutableDictionary *)messageContent 
{ 
    NSString *m = [messageContent objectForKey:kMsg]; 
    [messageContent setObject:[m substituteEmoticons] forKey:kMsg]; 
    [messageContent setObject:[messageContent objectForKey:kTrnDate] forKey:kTrnDate]; 
    [messageContent setObject:[messageContent objectForKey:kSender_User] forKey:kSender_User]; 
    [messageContent setObject:[messageContent objectForKey:kReceiver_User] forKey:kReceiver_User]; 

    [arrayChat addObject:messageContent]; 
    NSLog(@"%@",arrayChat); 

    dispatch_sync(dispatch_get_main_queue(), ^{ 
     [self.tblChat reloadData]; 
    }); 

    if(arrayChat.count > 1){ 

     NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:arrayChat.count-1 
                 inSection:0]; 

     [self.tblChat scrollToRowAtIndexPath:topIndexPath 
          atScrollPosition:UITableViewScrollPositionMiddle 
            animated:YES]; 
    } 
} 

Когда я получил сообщение и перезагрузить таблицу, чем numberOfRowsInSection называется сообщением добавляются в массив, и я также распечатан массивом подсчитывать в numberOfRowsInSection и увеличить также, но не называется cellForRowAtIndexPath поэтому я не могу показать свое сообщение.

Я также попытался перезагрузить стол без основной нити, но не работал.

Что проблема?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    NSLog(@"%lu",[arrayChat count]); 
    return [arrayChat count]; 

} 

EDIT

ЖАЛЬ, но эта проблема произошла после того, как приложение идет от фона.

Я prtinted таблицу:

когда приложение запуска:

2016-08-22 11:21:02.465 Diamonds[16679:6710554] 
<UITableView: 0x12e0a6200; frame = (0 55; 250 332); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x6f50>; animations = { position=<CASpringAnimation: 0x1320e3b40>; bounds.origin=<CASpringAnimation: 0x132173610>; bounds.size=<CASpringAnimation: 0x132173700>; bounds.origin-2=<CASpringAnimation: 0x13215c1b0>; bounds.size-2=<CASpringAnimation: 0x13215c2a0>; 
}; 
layer = <CALayer: 0x5a20>; contentOffset: {0, 3609}; contentSize: {250, 3941.197265625}> 

После выхода из фона:

2016-08-22 11:19:51.910 Diamonds[16676:6709818] 
<UITableView: 0x1388e2e00; frame = (0 55; 250 0);clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x13ca33040>; layer = <CALayer: 0x13c9e2bf0>; contentOffset: {0, 3125}; contentSize: {250, 3855.68359375}> 

EDIT

Я также нашел одну ошибку, когда я добавлен объект в массив, который добавляется, но whe n i перезагружать данные в 2-й раз, чем последний объект, добавленный после того, как приложение исходит из фона, который он потерял.

+0

Вы проверили, что массив имеет объекты? – user3182143

+0

да он добавляет новый объект .. и его счет также увеличивается в numberOfRowsInSection. – Kabali

+0

Показать, что кодировка – user3182143

ответ

0

Вы хотите завершить трудоемкую загрузку данных в фоновом потоке, а затем обновить интерфейс/ячейки, когда ваши данные готовы к основному потоку.

dispatch_queue_t concurrentQueue = dispatch_queue_create("Queue", NULL); 
     dispatch_async(concurrentQueue, ^{ 
      [self loadData]; 
     }); 

-(void)loadData 
{ 
    // Expensive operations add/remove data to NSArray or NSDictionary 
    . 
    .  
    // Operation done - now let's update our table cells on the main thread 

    dispatch_sync(dispatch_get_main_queue(), ^{ 
     [self.tblChat reloadData]; 
    }); 
} 
+0

не работает, ... я добавил этот код ... но последний объект добавлен в массив и когда я снова загружаю таблицу, чем она исчезает из массива. – Kabali

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