`enum` 类型在将它作为参数从一个 viewController 传递给另一个时总是得到 `0`

`enum` type always getting `0` while passing it as parameter from one viewController to another

这是我的 enum :

typedef enum {
    ViewControllerNameSignUpViewController,
    ViewControllerNameForgotPasswordViewController,
    ViewControllerNameProfileViewController,
} ViewControllerName;

我想从我的 LeftMenuViewController 发送 ViewControllerNameHomeViewController

LeftMenuViewController 代码:

HomeViewController *controller = [HomeViewController initViewControllerWithFurtherNavigationFor:ViewControllerNameProfileViewController];
UINavigationController *navController = (UINavigationController *)self.revealViewController.frontViewController;
[navController setViewControllers:@[controller] animated:NO];
[self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES];

HomeViewController 代码:

@property (assign, nonatomic) ViewControllerName viewControllerName;

.

+ (instancetype)initViewControllerWithFurtherNavigationFor:(ViewControllerName)viewControllerName
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    HomeViewController *controller = [storyboard instantiateViewControllerWithIdentifier:kHomeViewControllerID];

    if (controller) {
        controller.viewControllerName = viewControllerName;
    }

    return controller;
}

这里controller.viewControllerName是完美获取参数,即2。但是当我从 viewDidLoad 检查它时,它总是得到 0 :

- (void)viewDidLoad {
    [super viewDidLoad];
    [self leftMenuButtonInitialization];
    [self initialViewSetUp];
    [self furtherNavigation];
}

.

- (void)furtherNavigation
{
    if (self.viewControllerName == ViewControllerNameProfileViewController) {
        ProfileViewController *controller = [ProfileViewController initViewController];
        [controller presentViewController:controller animated:YES completion:nil];
    }
}

这里,self.viewControllerName总是0。当我在 initViewController 中设置值时,我不是可以通过 class 访问它作为 self.viewControllerName 吗?或者我遗漏了什么?
非常感谢。

经过 1 小时的挖掘,我找到了替代方案。问题可能在于 initViewControllerWithFurtherNavigationFor.

的调用方法

我在 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender([[segue identifier] isEqualToString:@"goToProfileViewController"]) 中使用 segue 调用了那个方法。所以我不必再 instantiateViewControllerWithIdentifier 了。我可以简单介绍为destinationViewController。然后可以传递任何关联的参数。因此,不要使用此代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"goToProfileViewController"]) {
    HomeViewController *controller = [HomeViewController initViewControllerWithFurtherNavigationFor:ViewControllerNameProfileViewController];
    UINavigationController *navController = (UINavigationController *)self.revealViewController.frontViewController;
    [navController setViewControllers:@[controller] animated:NO];
    [self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES];
    }
}

使用这个:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"goToProfileViewController"]) {
    HomeViewController *controller = [segue destinationViewController];
    controller.viewControllerName = ViewControllerNameProfileViewController;
    }
}

希望对这类问题有所帮助。 :)