objective-c - 如何正确使用 NSUserDefaults 类来绕过 View ?

标签 objective-c ios xcode

我在 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 实例”。我该如何解决这个问题?

最佳答案

  1. 在您的第一个代码片段中,您基本上会说“如果TermsAccepted不是YES(因此它是NO),则将其设置为NO。这没有意义
  2. 在第二个代码片段中,您编写了[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/

相关文章:

ios - 如何检查 JSON 对象不为空?

objective-c - 字符之间的 NSString 填充/空格

objective-c - 如何找到两个 NSString 的共同模式?

iphone - 单击按钮时 iOS 应用程序崩溃 iPhone

iphone - 在 "Waiting For Upload"时添加应用内购买

android - 解析开源服务器云代码与旧代码不同

cocoa - XCode 3.2.3 中的绑定(bind)

objective-c - Xcode 和 xcodebuild 上的不同行为

objective-c - AF网络框架: how to cache image

ios - iOS 重定向对话框中 IdentityProvider 的名称为 "(null)"