在同一个UITableView上调用reloadData,但似乎它正在调用另一个

时间:2014-01-25 15:38:00

标签: objective-c uitableview

现在这几个小时都很头疼,我终于发现了实际发生的事情,但我不知道如何解决这个问题。

我已经从故事板中正确连接了UITableView的List.h:

@property (strong, nonatomic) IBOutlet UITableView *tableView;

然后是List.m,我为我的UITableView设置了委托和数据源:

// Set tableview datasource and register class for cell reuse
self.tableView.dataSource = self;
[self.tableView registerClass:[TableViewCell class] forCellReuseIdentifier:@"cell"];

// Set tableview delegate
self.tableView.delegate = self;

// Set tableview cells style
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundColor = [UIColor colorWithWhite:0.1f alpha:1.0f];

// Set tableview frame
self.tableView.frame = CGRectMake(0.0, 35.0, self.tableView.frame.size.width, self.tableView.frame.size.height-35.0);

然后在NSNotification上我试图[self.tableView reloadData]:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doUpdateAppBefore:) name:UIApplicationWillEnterForegroundNotification object:nil];

此外,我正在每个UIApplicationBecomeActive通知上重新加载tableView的数据。

在我关闭我的应用程序并从后台打开它以确定它是否重新加载数据之前,我正在转移到另一个UIViewController并返回,这导致我的self.tableView的某种方式标识符发生了变化。我正在检查它:

NSLog(@“调用reloadData on:%@”);

在开始时它给了我:

Calling reloadData on <UITableView: 0x9b09400;....

但在我从另一个UIViewController转回后,它给了我:

Calling reloadData on <UITableView: 0x9b4b000;

导致在我从后台状态打开应用程序后它实际上没有重新加载数据。

我一直在想......当我从另一个视图控制器回来时,viewDidLoad再次触发,它是否有可能以某种方式再次设置tableView.delegate并改变一些东西?只是想......

非常感谢您的回答。

1 个答案:

答案 0 :(得分:1)

听起来你有一个视图控制器,在它上面按一个模态视图,然后想要在你完成时返回到原始视图控制器。所以,你在故事板中设置了一个模态segue,然后在第二个模态segue中返回。问题是你的第二个模态segue没有返回到原始视图控制器,但它创建了该视图控制器的新实例,现在你拥有原始视图控制器,第二个视图控制器和不需要的第三个视图控制器。您需要关闭第二个视图控制器,然后将其返回到原始视图控制器,而不是创建创建第三个视图控制器的segue,从而使您返回到原始表视图。所以你要做的就是摆脱第二个segue并用IBAction替换它,像

这样的东西
- (IBAction)goBack:(id)sender;
在你的.h文件中

。将它连接到您的按钮或您正在使用的任何东西,以立即触发segue。然后,在您的实现文件中,忽略模态视图,如下所示:

- (IBAction)goBack:(id)sender
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

那应该能得到你想要的东西。

或者,这可能更好,您也可以使用展开segue。转到List.h,然后创建此方法:

- (IBAction)unwind:(UIStoryboardSegue *)segue;

然后执行它,你现在可以留空。然后,从当前触发segue的按钮拖动到Exit,并选择Action Segue unwind。那也会让你回来。