如何使用委托在viewDidLoad中重新加载tableview?

时间:2017-05-23 15:20:33

标签: ios objective-c uitableview

我只有TODO列表,其中有:

  • 协议的方法reloadTableViewWhenItChanges;
  • 获取数据(即核心数据);

表视图在停止/运行编译器后重新加载。 但是我需要在viewDidLoad中重新加载表格视图(不在viewWillAppear / viewDidAppear中),只有在managedObjectContext中发生变化后才使用委托表重新加载。

我该怎么做?

这是我的代码(它有什么问题?例如,我在哪里将[self.tableView reloadData]放在我的代码中?):

 - (void)viewDidLoad {
     [super viewDidLoad];
     self.title = @"Note List";
     self.barButtonAddNote = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                                           target:self
                                                                           action:@selector(addNewNote:)];
     [self.navigationItem setRightBarButtonItem:self.barButtonAddNote animated:YES];
     [self reloadTableViewWhenItChanges]; }

 - (void)reloadTableViewWhenItChanges // protocol's method {
     self.addNoteViewController.delegate = self;
     if ([self.managedObjectContext hasChanges])
     {
         NSError *error;
         [self.managedObjectContext save:&error];
     }
     [self fetchData];
     [self.tableView reloadData]; }

 - (void)fetchData {
     NSFetchRequest *request = [[NSFetchRequest alloc]init];
     NSEntityDescription *note = [NSEntityDescription entityForName:@"Note"
 inManagedObjectContext:self.managedObjectContext];
     [request setEntity:note];

     NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"task" ascending:YES];
     NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
     [request setSortDescriptors:sortDescriptors];

     NSError *error = nil;
     NSArray *mutableFetchResults = [self.managedObjectContext executeFetchRequest:request error:&error];

     if (mutableFetchResults != nil){
         self.notesArray = [[NSMutableArray alloc] initWithArray:mutableFetchResults];
     } }

2 个答案:

答案 0 :(得分:2)

如@eik_cloner所述,您无需在viewDidLoad中重新加载表格视图,因为它是自动完成的。
如果您想手动执行此操作,则必须在reloadData UITableView方向调用{...}}方法:

[yourTableView reloadData];

答案 1 :(得分:0)

在目标C中: -

[tableViewName reloadData];

在斯威夫特: -

tableViewName.reloadData()

确保通过UIStoryboard或按代码使用UIViewController配置代理。