我在 xcode 中有一个使用 Storyboard的项目。加载的第一个 View 是“接受条款和条件” View ,用户必须单击“接受”按钮才能继续。单击后,它将转到下一个 View 。用户在程序第一次启动时单击“接受”后,我不想让他们再次看到该 View - 我希望它直接进入下一个 View 。我有一些代码,但它不起作用。这就是我所拥有的:
在应用程序委托(delegate)中:(在 applicationDidFinishLaunchingWithOptions 内)
if([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]!=YES)
{
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"TermsAccepted"];
}
在接受条款和条件 View 内实现:(viewDidLoad)
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]){
[self.navigationController pushViewController: self animated:YES];
//I want it to go to the next screen
}
else {
//I want to show this screen, but I don't know what goes here
}
也在接受条款和条件 View 内实现(在接受按钮中)
- (IBAction)acceptButton:(id)sender {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TermsAccepted"];
}
我运行它并收到错误:“不支持多次推送同一 View Controller 实例”。我该如何解决这个问题?
最佳答案
- 在您的第一个代码片段中,您基本上会说“如果TermsAccepted不是YES(因此它是NO),则将其设置为NO。这没有意义
- 在第二个代码片段中,您编写了
[self.navigationController PushViewController:selfanimate:YES];
。所以基本上你要求当前的UIViewController
(self
) 将自己推到自己的 navigationController 上......这也没有意义。
这就是您出现此错误的原因。您尝试推送当前的 viewController self
,而它已经在导航 Controller 的屏幕上。因此,您尝试在同一个 navigationController 上推送同一个实例 (self
) 两次。
您显然打算在导航 Controller 上推送另一个 viewController(可能是 TermsAndConditionViewController
的实例或显示应用程序条款和条件的内容),而不是当前 viewController 本身,这不会没有道理。
关于objective-c - 如何正确使用 NSUserDefaults 类来绕过 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884025/