NSUserDefaults - 我该如何修复此代码?

时间:2012-11-21 13:43:21

标签: iphone objective-c xcode ios6

我正在尝试制作一些能够记住特定视图的设置向导,但是由于我使用ARC,因此我的AppDelegate.m代码存在一些问题。 有谁知道如何解决这个问题,因为如果我在启动屏幕上编译应用程序崩溃..

我的AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    NSString *controllerName = [[NSUserDefaults standardUserDefaults] objectForKey:@"WIZARD_VIEW"];
    if ([controllerName length]) {
        Class controllerClass = NSClassFromString(controllerName);
        UIViewController *controller = [[controllerClass alloc] init];

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

更清楚的是,在viewcontroller文件中我添加了以下代码作为建议:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSUserDefaults standardUserDefaults] setObject:[[self class] description] forKey:@"WIZARD_VIEW"];
     NSLog(@"ViewWillAppear Done.");
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"WIZARD_VIEW"];
     NSLog(@"viewWillDisappear");
    [[NSUserDefaults standardUserDefaults] synchronize];
}

编译时的Crashlog:

/Users/Tim/Documents/XCODE_DEV/App/AppDelegate.m:17:33: No visible @interface for 'NSUserDefaults' declares the selector 'forKey:'

/Users/Tim/Documents/XCODE_DEV/App/AppDelegate.m:20:27: Unused variable 'controller'

2 个答案:

答案 0 :(得分:0)

查看编译器警告,我将在你的AppDelegate.m中猜测,在第17行,你在forKey:上呼叫NSUserDefaults

NSUserDefaults没有forKey:方法,因此会引发异常。

这可能只是一个错误位置的方括号。

答案 1 :(得分:0)

第一次注册defaults.To注册默认值不足以调用setObject:forKey方法,你必须使用registerDefaults方法:

- (void)registerDefaults:(NSDictionary *)dictionary;

文档:
NSUserDefaults

所以在你的情况下:

NSUserDefaults* standard=[NSUserDefaults standardUserDefaults];
[standard registerDefaults: @{ @"WIZARD_VIEW" : [[self class]description]} ];

你最好将这些行放在initialize方法中,在任何非静态方法之前调用它。如果已经注册了默认值,那么没有问题,如果是应用程序的第二个+时间,这将不会覆盖你的默认值启动。

相关问题