视觉不是在视觉上进行的

时间:2014-02-21 15:47:25

标签: ios iphone objective-c uiviewcontroller segue

我正在处理一个segue问题而且它变得荒谬了。

我正在执行它,就像我在名为LoginViewController的视图控制器中一样:

- (void)loginSuccessfullyAccomplished
{
    [self performSegueWithIdentifier:@"switchToHome" sender:self];
}

上面的方法是从另一个类中调用的,其中一些其他签名操作是异步执行的,一旦完成,它就会从LoginViewController.m调用此方法:

// Some Code
.
.
.
.
case VIDYO_CLIENT_OUT_EVENT_SIGNED_IN:
{
    /*** Notifying upper layer ( Login View Controller ) from signing in ***/
    UIStoryboard *storyboard;
    if ( IDIOM == IPAD )
    {
        storyboard = [UIStoryboard storyboardWithName:@"MasterStoryboard-iPad" bundle:nil];
    }
    else if ( IDIOM == IPHONE )
    {
        storyboard = [UIStoryboard storyboardWithName:@"MasterStoryboard-iPhone" bundle:nil];
    }
    UINavigationController *nav = [storyboard instantiateInitialViewController] ;
    dispatch_async(dispatch_get_main_queue(), ^{
        [nav.viewControllers[0] loginSuccessfullyAccomplished];
    });
    break;
}
.
.
.
.
//Rest of the code

现在,问题在于:

loginSuccessfullyAccomplished被成功调用(使用断点来确保这一点),但我没有看到第二个视图控制器出现在屏幕上。

执行performSegue时没有错误也没有异常,这意味着我没有对segue标识符或从中执行segue的第一个视图控制器做出任何错误。

我也确定我正在使用push segue,并且我已将视图控制器嵌入到导航控制器中。

为了确保我没有对segue本身做任何错误,我实现了prepareForSegue方法并且它正在被调用。我也检查过它指向正确的目的地:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ( [segue.destinationViewController isKindOfClass:[UserHomeViewController class]] )
    {
        NSLog(@"YES");
    }
}

第二个视图控制器在视觉上与第一个视图控制器不相似,所以我肯定会注意到它是否会发生变化。

我不知道出了什么问题。任何建议都非常感谢。

感谢。

P.S:我知道有几十个“performSegueWithIdentifier没有被称为”问题,但没有一个问题对我有帮助!

1 个答案:

答案 0 :(得分:2)

该方法被成功调用,但在哪个实例上? IDIOM == IPHONE块中的代码非常可疑。它在一个全新的实例上调用loginSuccessfullyAccomplished,一个尚未呈现的实例,因此我们不会在UI中看到任何变化,这并不奇怪。

我认为您在运行登录逻辑的对象中需要的是对实际呈现的LoginViewController实例的引用。您可以通过将其作为委托来实现。也许更好,不要打扰指针....让登录逻辑发布一个NSNotification登录已经完成,并让LoginViewController观察并解雇自己。