2010-06-16 41 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

相關問題