2012-10-05 83 views
0

我正在创建一个免责声明,当用户第一次启动应用程序时将会显示。免责声明是一个带有2个选项的alertView。如果用户同意,则会显示firstViewController。如果他没有,他会被重定向到另一个viewController。但如果用户第一次同意,我不能让免责声明消失。每次应用启动时都会显示。任何帮助,将不胜感激。预先感谢您..NSUserDefaults和alertView

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

     if (![[defaults valueForKey:@"keyDisclaimer"] isEqualToString:@"accepted"]) { 

UIAlertView *disclaimer = [[UIAlertView alloc] initWithTitle:@"Read Before use" message:@"By using this app you agree to its terms and conditions.\n\n\n\n\n\n\n\n\n\n\ntext heren\n\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:@"No!" otherButtonTitles:@"Yes Let me In", nil]; 

[disclaimer show]; 

} 

// Override point for customization after application launch. 
return YES; 
} 

-(void) alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
NSString *buttonString = {[alertView buttonTitleAtIndex:buttonIndex]}; 

if ([buttonString isEqualToString:@"Yes Let me In"]) { 
    NSMutableDictionary* defaultValues = [NSMutableDictionary dictionary]; 

    [defaultValues setValue:@"accepted"forKey:@"keyDisclaimer"]; 

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues]; 



} 
else if ([buttonString isEqualToString:@"No!"]) { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"You are not allowed to use this app due to the fact that you did not agree to the terms and Conditions. Please exit this app!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 

// [[NSUserDefaults standardUserDefaults] setValue:@"notAccepted" forKey:@"keyDisclaimer"]; 
} 

    if ([buttonString isEqualToString:@"OK"]) { 
     introViewController *intro = [[introViewController alloc] initWithNibName:@"introViewController" bundle:nil]; 

     _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

     _window.rootViewController = intro; 
     [_window makeKeyAndVisible]; 
    } 
} 

回答

2
NSMutableDictionary* defaultValues = [NSMutableDictionary dictionary]; 
[defaultValues setValue:...forKey:...] 
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues]; 

这将注册您的默认值,如果他们不设置(首次)

而且,好像你忘[defaults synchronize]设置后,提交更改值。如果是这样,你根本不需要registerDefaults方法。

像这样:

if ([buttonString isEqualToString:@"Yes Let me In"]) { 
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setValue:@"accepted"forKey:@"keyDisclaimer"]; 
    [defaults synchronize]; 
} 
+0

请检查我更新的问题。它仍然不起作用 – snksnk

+0

你有一个错字。这可能是一个原因。我的手机没有任何问题.. – dreamzor

+1

ok我更新了关于默认同步的帖子,似乎这是完美的概率 – dreamzor

0

你想使用类似stringForKey或objectForKey代替valueForKey。

if([[defaults stringForKey:@"keyDisclaimer"] isEqualToString:@"accepted"]) { 

我在过去并没有总是以我想要的方式工作,但我在valueForKey中遇到过不好的经历。这可能是什么导致你一些问题。