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

是的!非常感謝,我從昨天開始就陷入了這個愚蠢的事情。 –

相關問題