2010-06-16 102 views
0

我想以编程方式初始化我的标签栏控制器,但我只是用我的代码获得了空白屏幕。我试图模仿TheElements sample app,东西似乎可以逐行比较,但显然有些问题。有什么建议么?iphone以编程方式初始化标签栏控制器视图

谢谢...

在main.m文件:

#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, @"DubbleWrapAppDelegate"); 
    [pool release]; 
    return retVal; 
} 

在DubbleWrapAppDelegate.h:

@interface DubbleWrapAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> { 
    UIWindow *window; 
    UITabBarController *tabBarController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 

@end 

在DubbleWrapAppDelegate.m:

@implementation DubbleWrapAppDelegate 

@synthesize window; 
@synthesize tabBarController; 


- init { 
    if (self = [super init]){ 
     // initialize to nil 
     window = nil; 
     tabBarController = nil; 
    } 
    return self; 
} 

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

    SafeTableViewController *vc1 = [[SafeTableViewController alloc] initWithStyle:UITableViewStylePlain]; 
    [vc1 setSafeItems:[SafeItem knownSafeItems]]; // Set the list of known SafeItems: 
    UINavigationController *nc1; 
    nc1 = [[UINavigationController alloc] initWithRootViewController:vc1]; 
    [vc1 release]; 


    BoxXRayTableViewController *vc2 = [[BoxXRayTableViewController alloc] initWithStyle:UITableViewStylePlain]; 
    UINavigationController *nc2; 
    nc2 = [[UINavigationController alloc] initWithRootViewController:vc2]; 
    [vc2 release]; 

    AboutLibertyViewController *vc3 = [[AboutLibertyViewController alloc] init]; 
    UINavigationController *nc3; 
    nc3 = [[UINavigationController alloc] initWithRootViewController:vc3]; 
    [vc3 release]; 

    NSArray* controllers = [NSArray arrayWithObjects:nc1, nc2, nc3, nil]; 

    tabBarController = [[UITabBarController alloc] init]; 
    tabBarController.viewControllers = controllers; 
    [controllers release]; 

    // Add the tab bar controller's current view as a subview of the window 
    window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    [window setBackgroundColor:[UIColor redColor]]; 
    [window addSubview:tabBarController.view]; 
    [window makeKeyAndVisible]; 

    [nc1 release]; 
    [nc2 release]; 
    [nc3 release]; 
} 

plist中被设置,以便没有引用NIB文件。

回答

1

你应该坚持到窗口对象。您将其标记为autorelease,以便在下一个应用程序循环中发布。

别叫自动释放上窗口

window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
+0

唉唉。添加self.window = window无效(也许我把它放在错误的地方),但删除autorelease消息(因为我释放它在dealloc函数)工作。谢谢!!! – unsorted 2010-06-16 10:36:48

相关问题