首页 » iOS编程(第4版) » iOS编程(第4版)全文在线阅读

《iOS编程(第4版)》24.4 状态恢复与应用生命周期

关灯直达底部

由于应用已经启用了状态恢复,因此应用的生命周期多出了一环——应用启动后首先会判断是否需要恢复应用状态,如图24-3所示。目前创建UIWindow对象和rootViewController的代码都位于application:didFinishLaunchingWithOptions:方法中,需要针对状态恢复修改代码。

图24-3 启用状态恢复后的生命周期

application:willFinishLaunchingWithOptions:方法会在系统恢复应用状态之前调用。因此,需要在状态恢复触发之前执行的代码都应该写在该方法中,例如创建并设置UIWindow对象。

在BNRAppDelegate.m中覆盖该方法,创建并设置UIWindow对象,代码如下:

- (BOOL)application:(UIApplication *)application

willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window =

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

self.window.backgroundColor = [UIColor whiteColor];

return YES;

}

然后更新application:didFinishLaunchingWithOptions:方法,如果应用没有触发状态恢复(例如,应用第一次启动时),就需要创建并设置应用的各个视图控制器。同时,创建并设置UIWindow对象的代码已经移动到了application: willFinishLaunching- WithOptions:中,因此要删除application: didFinishLaunchingWithOptions:中的相关代码:

- (BOOL)application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window =

[[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]];

// 如果应用没有触发状态恢复,就创建并设置各个视图控制器

if (!self.window.rootViewController) {

BNRItemsViewController *itemsViewController =

[[BNRItemsViewController alloc] init];

// 创建一个UINavigationController对象,

// 其根视图控制器是itemsViewController

UINavigationController *navController = [[UINavigationController alloc]

initWithRootViewController:itemsViewController];

// 将UINavigationController对象的类名设置为恢复标识

navController.restorationIdentifier =

NSStringFromClass([navController class]);

// 将UINavigationController对象设置为UIWindow的rootViewController

self.window.rootViewController = navController;

}

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}