必须有一种方法可以在没有使用NSFetchedResultsController的tableView的情况下更新UIViewController或视图吗?
在这种情况下,有一些标签和图片。我只想用来自managedobjectcontext的最新数据刷新它们。
谢谢。
答案 0 :(得分:1)
[myView setNeedsDisplay];
将重绘视图。
[myView setNeedsLayout];
将更新布局。
编辑:阅读完评论后,您可以清楚自己要做的事情。它被称为 UI数据绑定,并且在iOS中本身不支持它。您可以搜索github以寻找可能的开源实现,但我无法保证或推荐任何因为我没有使用任何实现。我的建议是封装在函数中拉取和显示数据,并简单地调用它来重新加载所有内容,特别是如果数据的重新加载是事件的结果:
-(void)loadDataFromDatabaseAndDisplayIt{
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription* entity = [NSEntityDescription
entityForName:@"User" inManagedObjectContext:self.context];
[fetchRequest setEntity:entity];
NSArray* data = [self.context executeFetchRequest:fetchRequest error:&error];
User* firstUser = data[0];
self.labelName.text = firstUser.name;
self.labelPhoneNumber.text = firstUser.phoneNumber;
//...
}
-(void)viewDidLoad{
//...
[self loadDataFromDatabaseAndDisplayIt];
}
-(void)someEventDidOccurThatShouldReloadData:(id)sender{
[self loadDataFromDatabaseAndDisplayIt];
}
答案 1 :(得分:1)
表格视图reloadData
的作用是: cellForRowAtIndexPath
多次,您自己添加代码来设置标签的内容等等。
同样,您自己必须设置标签和其他UI插座的内容。 setNeedsDisplay
只会重绘屏幕,而不会使用数据更新UI元素。您必须在控制器中“手动”执行此操作。
创建一个名为reloadViewData
的方法,并使用当前数据对象重置所有标签。这不是很多工作,因为大概你已经为初始视图设置编写了这段代码。只需将其纳入此方法并将其调用为视图设置和视图更新。