2012-02-14 81 views
2

我使用故事板功能创建iOS5应用程序。其基本结构是:iOS 5在第一次执行后没有工作

LoginScreen ---(SEGUE) - >自选画面---(上登出按)------(Segue公司返回到登录界面) - > LoginScreen

它很简单。我管理的第一SEGUE的方法是:

- (void) onResponse:(NSMutableDictionary *)response { 
    NSLog(@"Login successful,token received"); 
    // if the Login was successful,store the token 
    NSUserDefaults* userPref = [NSUserDefaults standardUserDefaults];  
    [userPref setObject:[response objectForKey:@"Token"] forKey:@"AuthToken"]; 
    [userPref synchronize]; 
    //..and let the user getting in 
    [self performSegueWithIdentifier:@"showHomeScreen" sender:nil]; 
} 

现在,奇怪的是,SEGUE正确地执行了第一次,但,当我回来的登录屏幕注销后performSegueWithIdentifier:不再工作(没有错误信息,根本没有任何反应)。不知道发生了什么事。这可能是问题所在?

我附上storyboard..you的截图可以看到环的右上角: enter image description here

非常感谢!

克劳斯

回答

4

它看起来像LoginVC连接到多个塞格。

处理该登录过程的最佳方式是使用Login ViewController的委托。然后在主VC中,检查凭证或任何其他信息,如果需要,请为LoginVC调用performSegue。当登录成功时,您调用委托方法,主VC将关闭模态视图。 LoginVC实际上不应该是导航的一部分或连接到除主VC之外的任何其他Segues。如果你需要它,我有一个完整的例子,但这很容易使用委托方法实现。

这里亚去: LoginViewController.h:

@protocol LoginViewControllerDelegate 
    -(void)finishedLoadingUserInfo; 
@end 

@interface LoginViewController : UIViewController <UITextFieldDelegate>{ 
    id <LoginViewControllerDelegate> delegate; 
} 

LoginViewController.m:

@synthesize delegate; 

- (void) onResponse:(NSMutableDictionary *)response { 
    NSLog(@"Login successful,token received"); 
    // if the Login was successful,store the token 
    NSUserDefaults* userPref = [NSUserDefaults standardUserDefaults];  
    [userPref setObject:[response objectForKey:@"Token"] forKey:@"AuthToken"]; 
    [userPref synchronize]; 
    //..and let the user getting in 
    [delegate finishedLoadingUserInfo]; 
} 

在仪表板VC .m文件:

#pragma mark - LoginViewController Delegate Method 
-(void)finishedLoadingUserInfo 
{  
    // Dismiss the LoginViewController that we instantiated earlier 
    [self dismissModalViewControllerAnimated:YES]; 

    // Do other stuff as needed 
} 

所以要旨在应用程序加载时检查凭据,并在需要时调用(在仪表板VC中):

[self performSegueWithIdentifier:@"sLogin" sender:nil]; 
在prepareForSegue方法(在仪表板VC)

然后:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"sLogin"]) { 
     LoginViewController *livc = segue.destinationViewController; 
     livc.delegate = self; // For the delegate method 
    } 
} 

确保命名Segue公司s登录或这是不行的:)

Storyboard

+0

喜Eljay,谢谢你的回答。是的,请一个有效的例子对于谁正在阅读这个帖子很有帮助。你可以请张贴吗?我已经尝试了一种解决viewController的方法,但在我的情况下是适当的导航控制器(tab + nav),它有点复杂。 – Claus 2012-02-14 13:32:50

+0

除此之外,哪个是Segue多于一个的问题呢? – Claus 2012-02-14 13:33:49

+0

不是一个问题有多个赛格,但在你的情况下,应该只有一个。 LoginVC不应该连接到NavController。将修改答案在几分钟内包括一个例子 – 2012-02-14 13:40:59

相关问题