当您在另一个TableView中编辑数据时,为了刷新原始TableView中的数据,我很困惑。有人可以简单地说明这样做的正确方法是什么?
我有一个基于DrillDown教程here的应用程序,它显示了我最喜欢的引号。引号存储在sqlite数据库中,该数据库在应用程序启动时加载。我的RootViewController显示引号类别,数据由QuotesAppDelegate提供。
在我的RootViewController上有一个编辑按钮,显示一个SettingsViewController,它允许您切换将显示哪些类别,哪些不会。
在click_Saved方法中,我使用所做的任何更改来更新数据库,并尝试从此SettingsViewController刷新RootViewController。我更新了RootViewController的数据数组cvc.categories
和底层数据库[sub setActive:s.active]
。我知道数据库正在正确更新,因为当我重新启动应用程序时,更改是在RootViewController中进行的。但是我希望在click_Saved时立即显示更改,它会关闭SettingsViewController并返回RootViewController。
我已经尝试了[self.tableView reloadData],尝试过通知,并搜索SO寻找解决方案,并且必须缺少一些基本问题,我将不胜感激。
- (void) save_Clicked:(id)sender {
RootViewController *cvc = [[RootViewController alloc] init];
QuotesAppDelegate *appDelegate = (QuotesAppDelegate *)[[UIApplication sharedApplication] delegate];
for (Subject *s in selectedTabs){
NSLog(@"-- Set selected subject %@-%@ to %ld", s.category_title, s.title, (long)s.active);
//UPDATE THE ACTIVE STATUS ON THE SELECTED SUBJECTS
[s setActiveStatus:s.active];
//UPDATE ARRAY
for (Subject *sub in appDelegate.subjects){
if (sub.subject_id == s.subject_id){
[sub setActive:s.active];
}
}
}
//RELOAD WHOLE DATABASE
[appDelegate populateFromDatabase];
cvc.categories = [appDelegate activeCategories];
cvc.subjects = [appDelegate activeSubjects];
[cvc.tableView reloadData];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"refreshData"
object:nil
userInfo:nil//userInfoDictionary
];
[self.navigationController dismissViewControllerAnimated:YES completion: nil];
}
编辑:我发现numberOfRowsInSection
被多次调用,看起来正确更新然后还原,如您所见:
2015-11-14 11:38:55.086 Quotes[49115:2751005] ~~~numberOfRowsInSection: 15
2015-11-14 11:38:55.086 Quotes[49115:2751005] ~~~numberOfRowsInSection: 16
2015-11-14 11:38:55.087 Quotes[49115:2751005] ~~~numberOfRowsInSection: 15
2015-11-14 11:38:55.533 Quotes[49115:2751005] ~~~numberOfRowsInSection: 16