必须有一种方法可以在没有UIViewController的情况下使用NSFetchedResultsController更新tableView或视图?
在这种情况下,有一些标签和一张图片。我只想用managedobjectcontext中的最新数据刷新它们。
谢谢。
发布于 2015-04-21 17:57:17
[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];
}
发布于 2015-04-21 22:14:05
表视图的reloadData
所做的就是多次调用cellForRowAtIndexPath
,这是您自己添加代码来设置标签内容的地方,等等。
同样,您必须自己设置标签和其他UI出口的内容。setNeedsDisplay
只会重画屏幕,而不会用数据更新UI元素。您必须在您的控制器中“手动”执行此操作。
创建一个类似于reloadViewData
的方法,并用当前数据对象重置所有标签。这不需要太多的工作,因为您可能已经为初始视图设置编写了此代码。只需将其分解到此方法中,并在视图设置和视图更新时调用它。
https://stackoverflow.com/questions/29779656
复制相似问题