我已经编码我的应用程序返回到一个特定的视图控制器重新启动。我要它从核心数据中提取数据。如果这个应用程序只是后台的话,它就能正常工作。但是,如果应用程序被终止并启动冷,它将转到AppDelegate中指定的顶级视图控制器。我搜索过StackOverflow和其他论坛,但是没有发现任何解决这个问题的方法。
应用程序代表已经选择加入。我在用故事板。我想重新启动的视图控制器在情节提要中有一个恢复ID。视图控制器还实现了encodeRestorableStateWithCoder和decodeRestorableStateWithCoder。我已经按照苹果的建议设置了它,但它并不是在冷启动的情况下工作。
我有三个问题:
提前谢谢你!
从AppDelegate中添加适用的代码。如果用户是在配置文件详细信息屏幕上,我想返回到那里,即使是从冷开始。我能够确认配置文件ID正在写入磁盘,并且正在读取它。我没有在故事板上为ProfileVC检查“是初始视图控制器”。但无论如何,它还是会返回给ProfileVC。
NSDictionary *settings = [self readAppState];
if ([settings objectForKey:PROFILE_ID_DICT_NAME]) {
NSLog(@"AppDelegate: didFinishLaunchingWithOptions: PROFILE_ID_DICT_NAME = %@",
[settings objectForKey:PROFILE_ID_DICT_NAME]);
ProfileDetailsVC *controller = (ProfileDetailsVC *) navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
} else {
NSLog(@"AppDelegate: didFinishLaunchingWithOptions: PROFILE_ID_DICT_NAME is null");
ProfileVC *controller = (ProfileVC *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
}
发布于 2014-02-12 14:11:27
你可以这样做:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//do your core data load here
if(your core data condition){
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"someViewController"];
self.window.rootViewController = viewController;
} else {
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"someOtherViewController"];
self.window.rootViewController = viewController;
}
[self.window makeKeyAndVisible];
// Override point for customization after application launch.
return YES;
}
小心,instantiateViewControllerWithIdentifier
引用的是故事板标识符,而不是类名。
发布于 2014-02-13 08:19:07
必须将唯一的恢复标识符分配给需要还原的所有视图控制器。这包括:
因此,如果您有一个选项卡条控制器,其中一个选项卡包含一个nav控制器,并且它有一个根控制器,那么所有3个都必须具有要还原的根控制器的恢复标识符。
发布于 2014-02-13 08:34:59
首先,看看本教程,我认为您可以在这里找到一些有用的东西-- NSCoding
以及视图控制器之间的切换。您能提供更多的细节,以便我们可以帮助您提供更好的解决方案。从冷启动转换的目的是什么?前面的例子,如果用户登录或不登录。
更新
考虑到您拥有存储所有配置文件的数据库,无论是本地数据库还是远程数据库。当用户打开配置文件时,您可以保存配置文件的id (id、本地数据库或用户默认值),然后当应用程序启动时,添加签入路由视图控制器
NSString *savedProfile = [[NSUserDefaults standartDefaults] valueForKey:@"savedProfile"];
if (savedProfile) {
//retrieve needed profile
//open view with this profile
}
https://stackoverflow.com/questions/21730138
复制相似问题