弹出后从DetailViewController重新加载TableView数据

时间:2014-05-27 19:27:16

标签: ios objective-c uitableview

如何点击我的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];
}

1 个答案:

答案 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是对导航堆栈上原始视图控制器的引用。)