Ser*_*yov 2 iphone cocoa-touch objective-c uiviewcontroller ios
我需要我的应用程序记住哪个是最后UIViewController打开的,所以当应用程序加载内存不足时,我替换了一个rootViewController属性AppDelegate保存在NSUserDefaults:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window = window;
frontViewController = [[SGLoginScreenViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是在ViewDidLoad每个方法中加入一些代码ViewController并记住它的名称NSUserDefaults以便以后使用它didFinishLaunchingWithOptions,如下所示:
[[NSUserDefaults standardUserDefaults] setObject:self forKey:@"currentViewController"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)
但是,问题是XCode给了我这个警告:
*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<SGMainScreenFirstTimeViewController: 0x8e1fea0>' of class 'SGMainScreenFirstTimeViewController'. Note that dictionaries and arrays in property lists must also contain only property values.
Run Code Online (Sandbox Code Playgroud)
关于如何实现这一切的任何想法都正确吗?提前致谢
您只能保存符合键值编码(NSString,NSnumber等)的用户默认对象.将类转换为字符串并重新创建知道类名的类将是您希望实现的目标.这将是一种在NSUserDefaults中保存的好方法
[[NSUserDefaults standardUserDefaults] setObject:NSStringFromClass([self class]); forKey:@"currentViewController"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)
对于加载,您可以根据保存的字符串重新创建类,如下所示:
NSString *savedClassName = [[NSUserDefaults standardUserDefaults] objectForKey:@"currentViewController"];
UIViewController *controller = [(UIViewController *)NSClassFromString(savedClassName) alloc] init];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1276 次 |
| 最近记录: |