diff -r 506f7d6a82b3 -r 988e39ef3c20 cocoaTouch/SplitViewRootController.m --- a/cocoaTouch/SplitViewRootController.m Wed Apr 07 12:15:49 2010 +0000 +++ b/cocoaTouch/SplitViewRootController.m Wed Apr 07 15:54:15 2010 +0000 @@ -11,7 +11,7 @@ #import "DetailViewController.h" @implementation SplitViewRootController -@synthesize splitViewRootController, masterViewController, detailViewController; +@synthesize detailViewController; -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { @@ -27,44 +27,58 @@ // load the view programmatically; we need a splitViewController that handles a MasterViewController // (which is just a UITableViewController) and a DetailViewController where we present options -(void) viewDidLoad { - UINavigationController *detailedNavController; - detailViewController = [[DetailViewController alloc] initWithStyle:UITableViewStyleGrouped]; + self.detailViewController = [[DetailViewController alloc] initWithStyle:UITableViewStyleGrouped]; + [detailViewController release]; + NSLog(@"%d", [detailViewController retainCount]); + + UINavigationController *detailedNavController = [[UINavigationController alloc] initWithRootViewController:self.detailViewController]; + NSLog(@"%d", [detailViewController retainCount]); - Class splitViewController = NSClassFromString(@"UISplitViewController"); - if (splitViewController) { - splitViewRootController = [[splitViewController alloc] init]; + [detailViewController release]; + NSLog(@"%d", [detailViewController retainCount]); + + id splitViewRootController; + + Class splitViewControllerClass = NSClassFromString(@"UISplitViewController"); + if (splitViewControllerClass) { + splitViewRootController = [[splitViewControllerClass alloc] init]; CGRect screensize = [[UIScreen mainScreen] bounds]; [[splitViewRootController view] setFrame:CGRectMake(0, 0, screensize.size.height, screensize.size.width)]; - masterViewController = [[MasterViewController alloc] initWithStyle:UITableViewStylePlain]; + MasterViewController *masterViewController = [[MasterViewController alloc] initWithStyle:UITableViewStylePlain]; UINavigationController *mainNavController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; - detailedNavController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; - - // set attributes - masterViewController.detailViewController = detailViewController; + + masterViewController.detailViewController = self.detailViewController; + NSLog(@"%d", [detailViewController retainCount]); + + [masterViewController release]; + [splitViewRootController setViewControllers:[NSArray arrayWithObjects: mainNavController, detailedNavController, nil]]; [mainNavController release]; [detailedNavController release]; - [splitViewRootController setDelegate: detailViewController]; - + [splitViewRootController setDelegate: self.detailViewController]; + [detailViewController release]; + NSLog(@"%d", [detailViewController retainCount]); + // add view to main controller [self.view addSubview:[splitViewRootController view]]; - [detailViewController release]; - [masterViewController release]; + //[splitViewRootController release]; + } else { - detailedNavController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; [self.view addSubview:detailedNavController.view]; - // TODO: we are leaking here!!! } + [super viewDidLoad]; } - + +-(void) viewDidUnload { + [super viewDidUnload]; + self.detailViewController = nil; +} -(void) dealloc { [detailViewController release]; - [masterViewController release]; - [splitViewRootController release]; [super dealloc]; }