IOS / Xcode /核心数据:相当于[[self tableView] reloadData];什么时候没有tableview?

时间:2015-04-21 17:51:06

标签: ios core-data nsfetchedresultscontroller reload

必须有一种方法可以在没有使用NSFetchedResultsController的tableView的情况下更新UIViewController或视图吗?

在这种情况下,有一些标签和图片。我只想用来自managedobjectcontext的最新数据刷新它们。

谢谢。

2 个答案:

答案 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的方法,并使用当前数据对象重置所有标签。这不是很多工作,因为大概你已经为初始视图设置编写了这段代码。只需将其纳入此方法并将其调用为视图设置和视图更新。