我有一个简单的 TODO 列表,其中有:
- 协议(protocol)的方法
reloadTableViewWhenItChanges ;
- 获取数据(即核心数据);
停止/运行编译器后重新加载 TableView 。
但是我需要在 viewDidLoad 中重新加载 TableView (而不是在 viewWillAppear /viewDidAppear 中),只有在 中的某些内容发生更改后才使用委托(delegate)表重新加载>managedObjectContext .
我该怎么做?
这是我的代码(其中有什么问题?例如,我必须将 [self.tableView reloadData] 放在哪里?):
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Note List";
self.barButtonAddNote = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
actionselector(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];
} }
Best Answer-推荐答案 strong>
正如@eik_cloner 所说,您不需要在viewDidLoad 中重新加载 TableView ,因为它是自动完成的。
如果您想手动执行此操作,则必须在您想要的任何地方调用 UITableView 的 reloadData 方法:
[yourTableView reloadData];
关于ios - 如何使用委托(delegate)在 viewDidLoad 中重新加载 tableview?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/44138928/
|