1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
- (void)applicationDidFinishLaunching:(UIApplication *)application {
	NSArray* classNames = [[NSUserDefaults standardUserDefaults] arrayForKey:@"kTabBarControllerOrder"];
	if(classNames.count > 0) {
		NSMutableArray* controllers = [[NSMutableArray alloc] init];
		for(NSString* className in classNames) {
			for(UIViewController* controller in self.tabBarController.viewControllers) {
				NSString* controllerClassName = nil;
				
				if([controller isKindOfClass:[UINavigationController class]]) {
					controllerClassName = NSStringFromClass([[(UINavigationController*)controller topViewController] class]);
				} else {
					controllerClassName = NSStringFromClass([controller class]);
				}
				
				if([className isEqualToString:controllerClassName]) {
					[controllers addObject:controller];
					break;
				}
			}
		}
		
		if(controllers.count == self.tabBarController.viewControllers.count) {
			self.tabBarController.viewControllers = controllers;
		}
		
		[controllers release];
	}
	
	// Configure and show the window
	[window addSubview:[tabBarController view]];
	[window makeKeyAndVisible];
}

- (void)applicationWillTerminate:(UIApplication *)application {
	NSMutableArray* classNames = [[NSMutableArray alloc] init];
	
	for(UIViewController* controller in self.tabBarController.viewControllers) {
		if([controller isKindOfClass:[UINavigationController class]]) {
			[classNames addObject:NSStringFromClass([[(UINavigationController*)controller topViewController] class])];
		} else {
			[classNames addObject:NSStringFromClass([controller class])];
		}
	}
	
	[[NSUserDefaults standardUserDefaults] setObject:classNames forKey:@"kTabBarControllerOrder"];
	[[NSUserDefaults standardUserDefaults] synchronize];

	[controllers release];
}