从App Delegate在ViewController中运行代码

时间:2013-08-27 23:29:46

标签: ios objective-c

在我的appDelegate.m中,我正在运行:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    NSLog(@"url recieved: %@", url);
    NSLog(@"query string: %@", [url query]);
    NSLog(@"host: %@", [url host]);
    NSLog(@"url path: %@", [url path]);
    NSDictionary *dict = [self parseQueryString:[url query]];
    NSLog(@"query dict: %@", dict);
    if([[url host] isEqual: @"success"]){
        RegistrationController *rc = [RegistrationController alloc];
        [rc regSuccess];
    }
    else if([[url host] isEqual: @"fail"]){
        RegistrationController *rc = [RegistrationController alloc];
        [rc regFailed];
    }
    return YES;
}

在我的registrationcontroller.m中,我有这个

-(void)regSuccess{
    NSLog(@"REGSUCCESS!!!:D");
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    WaitController *rc = [storyboard instantiateViewControllerWithIdentifier:@"waitcontroller"];
    [self.navigationController pushViewController:rc animated:NO];
}
-(void)regFailed{
    NSLog(@"REGFAILED!!!:(");
    [UIView animateWithDuration:1.0 animations:^{
        _wheel.alpha = 0.0;
}];
}

当我在手机上连接到我的网址方案时,我被重定向到应用程序,控制台确实打印出REGSUCCESS !!!:D所以我知道registrationController.m中的方法被调用了。我遇到的问题是没有推送等待控制器,或者regSuccess方法中的任何其他对象操作都在工作。一直在寻找一个没有运气的几个小时的修复:(。请帮助。

注意: 我已经在registrationcontroller.h中实现了regSuccess和regFailed方法

谢谢!

1 个答案:

答案 0 :(得分:0)

一个可能的原因是[self.navigationController pushViewController..]可能无效,self.navigationController可能不存在。在UINavigationControllerXIB或以编程方式在某个位置引入Storyboard非常重要。值得注意的是,如果您在代码中引用的故事板包含导航控制器,这将无法正常工作,因为您试图在控制器内部的导航控制器上推动控制器推了。重要的是验证如果在XCode中设置断点并查看regSuccess方法,则应该在调试器中看到指向self.navigationController的有效指针。如果你没有,你将无法推动任何东西。

如果您已确认导航控制器存在(并且它的视图层次结构本身已添加到应用程序的视图层次结构中),则接下来需要查看您尝试添加的视图本身。据推测,这将是rc.view。如果不是添加到导航堆栈,您会调用:

[[self view] addSubview:[rc view]];

此外,通过使用调试器来检查变量或仅记录变量,请评估rc.view的属性。它的框架是什么?它应该出现在哪里?视图是否未正确创建?