1

我有一个带有故事板和导航控制器的应用程序,如果用户第一次启动该应用程序,我想弹出一个协议视图,

在 Appdelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //app launched first time
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setBool:YES forKey:@"firstTime"];
    BOOL firstTime = [prefs boolForKey:@"firstTime"];
    NSLog(@"firstTime %c",firstTime);

     //check if user has agreed agreement or not
    if ( firstTime==YES) {

        //replace and push rootview manually
        UIStoryboard *storyboard = [UIApplication sharedApplication].delegate.window.rootViewController.storyboard;

        UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"AgreementViewController"];

        [self.window.rootViewController presentModalViewController:loginController animated:YES];

    return NO;
    }else

     return YES;
}

Nslog我第一次得到 areverse question mark sign时,我想它既没有设置为 yes 也没有设置为 no

那么如何设置布尔值,将其保存在 ios 设备中并在每次应用启动时调用它?

4

2 回答 2

3

在日志语句中更改%c%i

于 2012-09-21T15:39:34.440 回答
3

您需要使用 NSUserDefaults 方法 registerDefaults。该方法允许您设置默认值(在您的情况下为“是”),仅在用户未更改该值时使用。一旦用户将值更改为 NO,注册的默认值将不再有任何效果。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstTime", nil];
BOOL firstTime = [prefs boolForKey:@"firstTime"];
 //check if user has agreed agreement or not
if ( firstTime==YES) { .....

然后,稍后当用户完成您想要的操作时,您会以通常的方式将键的值“firstTime”设置为 NO。

于 2012-09-21T15:41:16.947 回答