2017-01-13 16 views
-1

私は通常の操作を行います。サーバーからデータを要求し、テーブルビューをreloadSectionsで更新します。しかし、多くのクラッシュログが発生します。 reloadDataに電話すると、すべてがOKです。 reloadDataがうまく動作するとは言えますが、reloadSectionsがより効率的に機能するようです。
誰にもアイデアはありますか?そして、データをconfigコンUITableViewのreloadSectionsメソッドが呼び出されました。

[_pomelo onRoute:@"onTlive" withCallback:^(NSDictionary *data) { 
    @strongify(self); 
    if (self.liveTableView) { 
     [self.liveTableView configData:data refresh:self.playerView.isScreenPortrait]; 
    } 
}]; 

とテーブルビューをリフレッシュ:

は、永続的な接続でサーバーからデータを取得

無効なアップデート:ここで

- (void)configData:(NSDictionary *)data refresh:(BOOL)refresh { 
if (!data || data.allKeys.count == 0) { 
    return; 
} 
NSArray *liveArray = [data valueForKeyPath:@"body.data"]; 
[liveArray enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    NSArray *liveDetailInfo = [obj componentsSeparatedByString:@"|"]; 
    if (liveDetailInfo && liveDetailInfo.count > 0) { 
     NSArray *tliveInfo = [liveDetailInfo.lastObject componentsSeparatedByString:@"^"]; 
     SPBasketballLive *liveObject = [SPBasketballLive new]; 
     liveObject.type = tliveInfo[0]; 
     liveObject.time = tliveInfo[1]; 
     liveObject.team = tliveInfo[2]; 
     liveObject.playerId = tliveInfo[3]; 
     liveObject.score = tliveInfo[4]; 
     liveObject.text = tliveInfo[5]; 
     liveObject.quarter = ((NSString *)liveDetailInfo.firstObject).integerValue; 
     if (self.curMatch.liveInfo.count == liveObject.quarter) { 
      NSMutableArray *quarterArray = self.curMatch.liveInfo.firstObject; 
      [quarterArray insertObject:liveObject atIndex:0]; 
     } else { 
      NSMutableArray *quarterArray = [NSMutableArray new]; 
      [quarterArray addObject:liveObject]; 
      [self.curMatch.liveInfo insertObject:quarterArray atIndex:0]; 
     } 
    } 
}]; 
if (refresh) { 
    if (_curMatch.liveInfo.count > 0) { 
     [self.myTableView reloadSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone]; 
    } 
} 
} 

はクラッシュログです:セクション4の行数が無効です。更新後の既存のセクションに含まれる行数(98)は、tと等しくなければなりませんそのセクション(挿入された0、削除された0)に挿入または削除された行の数をプラスまたはマイナスし、そのセクションに出入りする行の数をプラスまたはマイナスします。それはケースでクラッシュを引き起こしてreloadSection方法は、セクションと行カウンタは更新されませんので、あなたがセクションまたは行カウンタを変更し、あなたのUITableViewは異なるカウンタを持っているとき

+0

ここに、uitableをリロードするために使用したコードを追加してください。 – KAR

+0

どのようなクラッシュがログに記録されているのかをここに示し、あなたの要件を明確にしてください。 – vaibhav

答えて

0

アプリがクラッシュした(0は0が出て移動し、中に移動しました)。

reloadDataを使用すると、最初にnumberOfSectionsInTableViewが呼び出され、次にnumberOfRowsInSectionが呼び出され、UITableViewにセクションと行の正しいカウンタが設定されます。

+0

私は '' '' reloadSection'''''を呼び出すと、 '' '' numberOfRowsInSection'''''も実行するデーモンを作っています。 –

+0

'numberOfSectionsInTableView'を呼び出しましたか? –

+0

'' '' '' numberOfRowsInSection'''''と '' 'numberOfSectionsInTableView'''''の両方が実行されていると確信しています。 –

関連する問題