2016-08-22 12 views
0

私はチャットアプリケーションを作成しました。私はこの方法でメッセージを受信した:テーブルビューのリロードデータがアプリケーションのバックグラウンド後に機能しない

-(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

私はまた、その1個のバグを見つけたとき、私arrayChatに追加されたオブジェクトが追加されますが、whe nアプリはバックグラウンドから消えた後に追加した最後のオブジェクトよりも2回データをリロードします。

+0

オブジェクトに配列が含まれていることを確認しましたか? – user3182143

+0

はいそれは新しいオブジェクト..を追加し、その数もnumberOfRowsInSectionで増加します。 – Kabali

+0

コーディングを表示 – user3182143

答えて

0

バックグラウンドスレッドで時間のかかるデータ読み込みを完了し、メインスレッドでデータが準備できたらUI /セルを更新したいとします。

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

関連する問題