在我的VC中,我有一个UITableView
。每个cell
都有一个UITableView
作为其内容之一。 Timer
设置为每10秒更新一个单元格。处理事件也会重新加载相应的单元格。
计时器调用的方法: -
-(void) updateVisitotsLists {
NSLog(@"UPDATING VISITORS LIST ***************************");
// Call API's to get lists
[api getVisitorsList];
// Init Arrays
browsingList = [MainAppDataObject sharedAppDataObject].visitors_browsingList;
secondList = [MainAppDataObject sharedAppDataObject].visitors_secondList;
thirdList = [MainAppDataObject sharedAppDataObject].visitors_thirdList;
fourthList = [MainAppDataObject sharedAppDataObject].visitors_fourthList;
// AS these are no more useful, so make it nil & save memory
[MainAppDataObject sharedAppDataObject].visitors_browsingList = nil;
[MainAppDataObject sharedAppDataObject].visitors_secondList = nil;
[MainAppDataObject sharedAppDataObject].visitors_thirdList = nil;
[MainAppDataObject sharedAppDataObject].visitors_fourthList = nil;
// Reload all lists with latest data
[self reloadBrowsingRow];
[self reloadSecondRow];
[self reloadThirdRow];
[self reloadFourthRow];
}
事件处理程序方法: -
-(void) handleNewVisitor : (NSNotification *) notification {
// UPDATE VISITOR'S LIST
Visitor *v = [notification object];
@try {
if (v != nil) {
// Add V to browsing list
[browsingList addObject:v];
// Reload browsing list
[self reloadBrowsingRow];
}
}@catch (NSException *e) {
NSLog(@"EXCEP - %@", e);
}
v = nil;
return;
}
重新加载方法 -
-(void)reloadBrowsingRow {
// Browsing
VisitorsListsCell *bcell = (VisitorsListsCell*)[self.visitorlistsTv cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]];
[bcell.listsTableView reloadData];
[bcell updateButtonText];
[bcell setNeedsDisplay];
bcell = nil;
return;
}
问题: -
当通过计时器调用updateVisitotsLists
时,更新的内容不会反映在单元格上。
当事件处理程序方法调用相同的[self reloadBrowsingRow];
方法时,将更新并反映单元格的内容。
由于这一点,尽管细胞内容被更新但在细胞状态改变之前不会反映 - 扩展或折叠。
我尝试在捕获的事件上正确删除计时器和单元格更新,但是当计时器打开并且事件被捕获时,方法被调用但内容未反映在屏幕上。
我觉得这两种方法可能同时调用重载方法,因此必须发生这种情况或者是什么?如何处理以确保细胞内容在任何方面都得到更新?任何帮助都非常感谢。感谢。
答案 0 :(得分:1)
在该方法上使用[tableview reloadData];
。
由于Reload
上的tableView
会重新加载所有数据,因此会更有帮助。