布尔值IOS NSUserdefaults中的反向问号

时间:2012-09-21 15:33:15

标签: objective-c ios storyboard boolean nsuserdefaults

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

在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第一次获得reverse question mark sign,我猜它既不是肯定也不是

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

您需要使用NSUserDefaults方法registerDefaults。该方法允许您设置默认值(在您的情况下为YES),仅在用户未更改值时使用。一旦用户将值更改为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。