0

SlidingViewController の操作に問題があります。私のスライディング ビュー コントローラーには、左ビュー コントローラー、メイン ビュー コントローラー、右ビュー コントローラーがあります。左のView ControllerはメニュースタイルのView Controllerで、メインView Controllerを選択したView Controllerに切り替えます。右側のビュー コントローラーは、NSUserDefault キーを使用した最近の検索を含むテーブル ビュー コントローラーです。このキーは、4 つの文字列を含む配列です。私が抱えている問題は、メイン ビュー コントローラーの viewWillAppear が呼び出されないため、この文字列をメイン ビュー コントローラーに送り返すことです。

View ControllerにviewDidAppearを手動で呼び出させようとしましたが、メインView Controllerを初期化するとまったく新しいviewControllerがすべて作成され、メインView Controller内にtableViewが作成されないため、テーブルをロードリロードしません見る。また、ログに記録すると、tableView は (null) として出力されます。

LeftViewController の didSelectRowAtIndexPath は次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIStoryboard *iPhoneStoryBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    ViewController *viewController = (ViewController *)[iPhoneStoryBoard instantiateViewControllerWithIdentifier:@"HomePage"];
    viewController.reloadArray = self.recentSearchesArray[indexPath.row];
    NSLog(@"Recent ReloadArray: %@", viewController.reloadArray); //This prints out the correct information


    /*
    MenuViewController *menuViewController = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
    SlidingViewController *slidingViewController = [[SlidingViewController alloc] initWithNibName:@"SlidingViewController" bundle:[NSBundle mainBundle] mainViewController:viewController leftViewController:menuViewController andRightViewController:self];*/ //Tried doing this too, doesn't work


    [viewController viewWillAppear:YES];
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
    [self performSelector@selector(toggleView)];

}

ViewController の viewWillAppear の

-(void)viewWillAppear:(BOOL)animated
{
   if(self.reloadArray.count !=0)
    {
        NSLog(@"Reload Array Not Empty!");
        NSLog(@"ReloadArray: %@",self.reloadArray); // Logs out the correct information
        [self.homePageTableView reloadData];
        NSLog(@"Table: %@", self.homePageTableView); // Logs out as (null) :(

    }
    else
    {
        NSLog(@"Reload Array Is Empty");
    }
}

誰にも提案/アイデアがありますか、または誰かがこのようなことをしたり、この問題に遭遇したりしましたか? もしそうなら、どんな情報やガイダンスも大歓迎です。前もって感謝します!

4

1 に答える 1

1

通知センターの方法を使用できます。メイン ビュー コントローラーの viewdidload メソッドで、次のコードを記述します。

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(anymethod:) 
                                             name: anyname 
                                           object: nil];

- (void)anymethod:(NSNotification *)notification {
  NSLog(@"%@", notification.userInfo);  

}

右のView Controllerで、次のようなデータを渡します。

[[NSNotificationCenter defaultCenter] postNotificationName:@"anyname" object:self userInfo:anydata];
于 2013-10-25T18:30:05.443 に答える