我正在尝试制作一些能够记住特定视图的设置向导,但是由于我使用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'
答案 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方法中,在任何非静态方法之前调用它。如果已经注册了默认值,那么没有问题,如果是应用程序的第二个+时间,这将不会覆盖你的默认值启动。