【发布时间】:2017-05-12 00:05:31
【问题描述】:
我遇到了一些我从未见过的事情。场景如下。我最初的 VC 有一个注册按钮,当点击该按钮时,会弹出几个单独的视图控制器来处理注册过程(我要求提供用户凭据,如果服务器要求,我要求提供验证码)。当这个过程完成后,我将一个自定义对象保存到 NSUserDefaults 中,以便稍后使用。然后再次显示初始 VC。
基本上,我确保我在主线程中并且自定义对象已保存。如果满足这些条件,我会推送应用程序的主要部分。
这是相关代码,我的所有日志都显示在输出窗口中,但是没有发生segue。
- (void)viewDidLoad {
[super viewDidLoad];
self.complete = false;
if([NSThread isMainThread]){
NSLog(@"Main Thread-Yes");
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"CUSTOMOBJECT"]) {
NSLog(@"Will begin pushToAuthenticate");
[self pushAuthenticateController];
}
} else {
NSLog(@"Main Thread-No");
}
}
- (void)pushAuthenticateController{
[self performSegueWithIdentifier:@"pushMainVC" sender:self];
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"pushMainVC"]) {
NSLog(@"PrepareForSegue-pushMainVC");
[segue.destinationViewController.navigationItem setHidesBackButton:YES];
[segue.destinationViewController.navigationItem setTitle:@"MainVC"];
}
}
在情节提要中,我有一个将初始 VC 与 MainVC 连接起来的 segue,该 segue 的标识符与“pushMainVC”匹配,如果我关闭并重新打开应用程序(在注册后),则确实会发生 segue。两个实例的控制台输出(注册并关闭并重新打开应用后重新加载初始 VC)如下:
APPNAME[4106:1628238] 主线程-是
APPNAME[4106:1628238] 将开始 pushToAuthenticate
APPNAME[4106:1628238] PrepareForSegue-pushMainVC
任何想法为什么会发生这种情况,我遗漏的任何小东西,或任何帮助都将不胜感激。太感谢了。
【问题讨论】:
-
据我所知,NSUserDefault 不保存 NSObject 子类自定义对象
-
你试过在
viewWillAppear而不是viewDidLoad推segue吗? -
@SahebRoy 如果您使您的自定义类符合 NSCoding 并实现 initWithCoder 和 encodeWithCoder,则可以。
-
哦,你确实实现了。没关系
标签: ios objective-c