2014-01-25 28 views
0

这已经让我头疼几个小时了,我终于知道实际发生了什么,但我不知道如何解决这个问题。在同一个UITableView上调用reloadData,但它好像在调用另一个

我有List.h用的UITableView从故事板连接正确:

@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]; 

当然我也会重装d每个UIApplicationBecomeActive通知的tableView的ata。

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

NSLog(@“Calling reloadData on:%@”);

,并在开始的时候给了我:

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

但之后,我从另一个UIViewController中Segue公司回它给了我:

Calling reloadData on <UITableView: 0x9b4b000; 

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

我一直在想......当我从另一个viewcontroller退缩时,viewDidLoad再次触发,是否有可能以某种方式再次设置tableView.delegate并更改某些内容?只是在想......

非常感谢您的回答。

+0

如果viewDidLoad触发两次,那么它看起来像你有一个新的视图,因此也是一个新的tableView。你使用什么样的segue来到你的新视图控制器,以及你用什么样的segue从你的新视图控制器到你的列表视图控制器? – Devin

+0

那么我继续看的视图是另一个ViewController,它有另一个UITableView。这是我正在使用的segue:[self performSegueWithIdentifier:@“Tomorrow”sender:self];标识符今天,它是一个模态segue –

+0

这么愚蠢的问题,问我使用什么segue的伟大提示......我前后继续,仍然创造新的对象,而不是[self dismissViewControllerAnimated :否完成:无]; –

回答

1

这听起来像你有一个视图控制器,在它上面推一个模态视图,然后当你完成后想返回到原始视图控制器。所以,你在故事板中设置了一个模态,然后再回到第二个模态。问题是你的第二个模态segue没有返回到原始视图控制器,但它创建了该视图控制器的一个新实例,现在你拥有原始视图控制器,第二个视图控制器和不需要的第三个视图控制器。您不需要创建一个创建第三个视图控制器的segue,您需要关闭第二个视图控制器,然后将其返回到您的原始视图控制器,因此也会返回到原始表视图。所以,你要做的是摆脱第二SEGUE和与IBAction为取代它的东西,把东西一样

- (IBAction)goBack:(id)sender; 

在.h文件中。将它连接到你的按钮或者你现在使用的任何触发segue的东西。然后,在您的实现文件,驳回像这样的模式的看法:

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

这应该得到你想要的东西。

或者,这可能会更好,您也可以使用unwind segue。去列表。h,并创建此方法:

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

然后只是实现它,现在可以将它留空。然后,从当前触发segue的按钮拖动到Exit,然后选择Action Segue放松。这也会让你回来。

+0

是的!非常感谢,我从昨天开始就陷入了这个愚蠢的事情。 –

相关问题