2011-06-19 79 views
1

编辑:工作,请参阅下面的代码。UINavigationController在运行编译时不显示

在一个应用程序上工作,现在我有AppDelegate类和一个自定义UINavigationController类。我现在的代码非常简单,我觉得我已经正确设置了XIB。构建成功,没有错误。但是当应用程序启动时,导航控制器不会显示。我没有看到导航栏和表格视图。我看到的只是一个空白的屏幕。这里是我的大部分代码:

// 
// FTPPhotosAppDelegate.h 
// FTPPhotos 
// 
// Created by Aaron McLeod on 11-05-30. 
// Copyright 2011 __MyCompanyName__. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import "RootViewController.h" 

@interface FTPPhotosAppDelegate : NSObject <UIApplicationDelegate> { 
    UINavigationController *navigationController; 
    RootViewController *rootViewController; 
} 

@property (nonatomic, retain) UINavigationController *navigationController; 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@property (nonatomic, retain) RootViewController *rootViewController; 

@end 


// 
// FTPPhotosAppDelegate.m 
// FTPPhotos 
// 
// Created by Aaron McLeod on 11-05-30. 
// Copyright 2011 __MyCompanyName__. All rights reserved. 
// 

#import "FTPPhotosAppDelegate.h" 

@implementation FTPPhotosAppDelegate 


@synthesize window=_window; 

    @synthesize navigationController, rootViewController; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    navigationController = [[UINavigationController alloc] init]; 

    rootViewController = [[RootViewController alloc] init]; 
    [self.navigationController pushViewController:rootViewController animated:NO]; 
    [self.window addSubview:[self.navigationController view]];  
    [self.window makeKeyAndVisible]; 
    return YES; 
} 


@interface RootViewController : UITableViewController<UIImagePickerControllerDelegate> { 
    NSMutableArray *photos; 
    UIImagePickerController *picker; 
    UIBarButtonItem *addPhotoButton; 
} 

@property (nonatomic, retain) NSMutableArray *photos; 
@property (nonatomic, retain) UIImagePickerController *picker; 
@property (nonatomic, retain) IBOutlet UIBarButtonItem *addPhotoButton; 

- (void) loadPhotos; 
- (IBAction) addPhoto; 
- (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize; 
@end 


#import "RootViewController.h" 

@implementation RootViewController 
@synthesize photos, picker, addPhotoButton; 

- (void)viewDidLoad 
{ 
    self.photos = [[NSMutableArray alloc] initWithCapacity:50]; 
    [self loadPhotos]; 
    [super viewDidLoad]; 
} 

任何想法?以下是XIB

http://img148.imageshack.us/img148/189/nib.png的屏幕截图。

让我知道你是否需要更多信息。

+0

您可以发布NIB文件的图像,其左侧有对象层次结构列表吗? –

+0

完成:http://img148.imageshack.us/img148/189/nib.png我也将添加到帖子中。 – agmcleod

+0

说阻止登录 –

回答

0

取而代之的是一个根视图控制器,使它成为UINavigationController *navigationController

然后在applicationDidFinishLaunching,说

navigationController = [[UINavigationController alloc]init]; 
FirstViewController *firstView = [FirstViewController alloc]init]; 
[self pushViewController:firstView animated:NO]; 
firstView.title = @"TITLE"; 
[self addSubview:navigationController.view]; 

编辑:一些示例代码我在我的一个应用

AppDelegate.h

#import <UIKit/UIKit.h> 

@interface DragonAge2AppDelegate : NSObject <UIApplicationDelegate> { 
UIWindow *window; 
UINavigationController *navigationController; 
} 

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

@end 

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
TitleClass *titlePage = [[TitleClass alloc]init]; 

navigationController = [[UINavigationController alloc]init]; 
titlePage.title = @"Dragon Age 2"; 
[navigationController pushViewController:titlePage animated:NO]; 
[titlePage release]; 

// Override point for customization after application launch. 
[window addSubview:navigationController.view]; 
[self.window makeKeyAndVisible]; 

return YES; 
} 
+0

FirstViewController从哪里来?而且即时通讯不知道当我使用IBoutlet将它映射到XIB上时,是否理解切换到UINavigation控制器。 – agmcleod

+0

FirstViewController是应用第一次加载时想要显示的任何控制器。我想你的情况下,它会被称为RootViewController。基本上,我的建议是在应用程序加载后尽快将您试图显示的表格推送到视图中。而不是自定义类。保持简单。 –

+0

感谢您的澄清。我将RootViewController的实例放在XIB上,因此从视觉角度来看更容易管理。如果你觉得它的价值,而没有XIB的学习经验,我会给它一个镜头。我初始化了导航控制器并完成了工作。但是,当我尝试推送rootViewController对象时,它会在此处引发SIG ABORT。 – agmcleod

0

您需要检查一些要点:

  • 在执行application:didFinishLaunchingWithOptions:的代码,当你运行应用程序?在此代码中添加一个NSLog(@"app launched")或在其中设置一个断点来检查它。如果未被调用,则您的FTPPhotosAppDelegate对象可能未被设置为XIB中的UIApplication单身人员的代表(如果您使用标准模板创建应用程序,此连接应默认完成),但值得检查
  • 您的AppDelegate的navigationControllerIBOutlet已正确连接到XIB中的实际UINavigationController?检查(使用NSLog或断点)它不是nil
  • XIB中的UINavigationController对象的视图IBOutlet相同:请检查它是否正确连接,而不是nil
+0

它看起来像XIB中的Photos App Delegate对象缺少与文件所有者的连接。当我建立连接并重建时,它现在在主方法中以BAD_ACCESS异常崩溃。 'int retVal = UIApplicationMain(argc,argv,nil,nil);' – agmcleod