以编程方式调用segue不起作用

时间:2012-05-05 22:31:16

标签: iphone ios ios5

我正在尝试打开一个特殊的viewController,如果它是用户第一次在我的应用程序上。在其他情况下,我已经让它工作了,但由于某种原因它现在不起作用。我尝试了两种不同的方法,但两种方法都没有。我尝试的第一件事是直接从appDelegate检查并完成它...然后我尝试检查它是否是第一次从根视图控制器viewDidLoad方法,如果它是第一次调用seque打开一个特殊的注册页面。 Niether正在工作,我不知道为什么.....这里有一些我正在使用的代码:

这是在rootviewcontroller中。当我这样做时,会在日志上打印出“Main is First Time”,所以我知道它正在那里。我仔细检查了故事板中的segue并且它被正确命名并且往返于正确的位置....

- (void)viewDidLoad
{
    [super viewDidLoad];

    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    if([appDelegate firstTime])
    {
    [self performSegueWithIdentifier:@"mToRegister" sender:self];
        NSLog(@"Main is First time");
    }
    // Do any additional setup after loading the view.
}

在appDelegate中:

NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults];
    BOOL hasused = [standardUserDefaults boolForKey:@“haveused”];

if(haveused){       
    //NOT THEIR FIRST TIME
    //Handle scenario
    firstTime = NO;

    NSString* guid = [[NSMutableString alloc]initWithString:[self getMacAddress]];
    //interest = [appDelegate interest];

    NSString *splitter = [[NSString alloc]initWithString:@"&"];
    NSMutableString *post = [[NSMutableString alloc]initWithString: @"user_read=1&guid="];
    [post appendString:guid];
    NSLog(@"String for Post is %@", post);
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setValue:@"Basic ==" forHTTPHeaderField:@"Authorization"];
    [request setURL:[NSURL URLWithString:@"http://something.com/app/usercrud.php"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    theConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
}
else {
        NSLog(@"This is the First time");
        firstTime = YES;
        //THEIR FIRST TIME
        //Handle scenario



//        UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
//                                                                 bundle: nil];
//        
//        UIViewController *controller = (UIViewController*)[mainStoryboard 
//                                                           instantiateViewControllerWithIdentifier: @"register"];
//        UIViewController *root = (UIViewController *)self.window.rootViewController;
//        [root presentModalViewController:controller animated:YES]; 
        [self.window.rootViewController performSegueWithIdentifier:@"mToRegister" sender:self];        

    }

为什么它不起作用的任何想法?如果没有人知道处理这种情况的更好方法吗?

2 个答案:

答案 0 :(得分:0)

我的app管理委托没有得到妥善管理,使用NSDefaults存储任何唯一的身份并检查下一次启动,如果NSDefaults中存在那么这不是第一次,如果它不存在,这不是第一次。测试是否,以及是否仍存在prblm,然后从app delegate发布你的if部分

答案 1 :(得分:0)

你使用什么样的segue?一个模态?我相信推送需要一个导航控制器就是我要问的原因。

您在viewDidLoad中用于RootViewController 的代码应该可以正常工作,因为我希望用户登录我的应用时做类似的事情。因此,我唯一的问题与segue的设置方式有关,并确保它的有效性和所有这些。

也许尝试删除segue并重新创建它?

同样偏离问题的主题,但最好不要在AppDelegate中放入大量代码,最好将其重构为单独的对象/单例。