如何点击我的detailViewController
后面的按钮/弹出窗口(使用UINavigationController
并推送)后,如何重新加载我的tableView数据?我尝试在viewDidAppear
重新加载我的tableView但没有任何改变。下面我附上了我的故事板,以便你们可以了解我的问题是什么。当我单击“保存”时,我希望当我返回UITableViewController
时,所有数据都会自动重新加载到我的tableView中。我怎样才能做到这一点?
http://i.stack.imgur.com/i1YyV.png
下面是我使用saveButton将新数据保存到coreData的代码。
- (IBAction)saveButton:(id)sender {
CoreDataAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:context];
NSString *name = self.nameTextfield.text;
NSString *phoneNumber = self.phoneTextfield.text;
CoreDataTableViewController *cdtvc = [[CoreDataTableViewController alloc] init];
[newContact setValue:name forKey:@"name"];
[cdtvc.name addObject:name];
[newContact setValue:phoneNumber forKey:@"phone"];
[cdtvc.phone addObject:phoneNumber];
NSError *error;
[context save:&error];
[cdtvc.tableView reloadData];
}
答案 0 :(得分:0)
您正在重新加载tableView
的另一个实例的CoreDataTableViewController
。有了这条线:
CoreDataTableViewController *cdtvc = [[CoreDataTableViewController alloc] init];
您创建了一个新的CoreDataTableViewController
实例,但是当您从导航堆栈弹出当前视图控制器时,将看到另一个实例,其表视图尚未收到消息-reloadData
。
要解决此问题,请使用以下代码替换上述行:
NSArray *navigationStack = [self.navigationController viewControllers];
NSInteger previousViewControllerIndex = navigationStack.count - 2;
CoreDataTableViewController *cdtvc = [navigationStack objectAtIndex:previousViewControllerIndex];
看看它是否成功。 (现在cdtv是对导航堆栈上原始视图控制器的引用。)