设备上的空白屏幕;模拟器工作正常

时间:2011-06-12 19:42:09

标签: iphone ios

我正在编写一个带导航控制器的iOS应用程序。当我在模拟器上打开它时,运行正常。当我在设备上运行它时,状态栏下方会显示一个空白屏幕。另外我无法弄清楚我的RootViewController在哪里成为默认视图(我怀疑这是我问题的根源)。

@class RootViewController;

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    RootViewController *viewController;

    UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet RootViewController *viewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    // Set the navigation controller as the window's root view controller and display.
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];

    // ...

    return YES;
}

RootViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Main Menu";
}

没有viewWillAppear,viewDidAppear等

显示0个元素的表格。

- (UITableViewCell *)tableView:(UITableView *)tv
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    tv.backgroundColor = [UIColor whiteColor];

    UITableViewCell *cell;
    if (indexPath.row == 0)
        cell = newsCell;
    else if (indexPath.row == 1)
        cell = configureCell;
    else if (indexPath.row == 2)
        cell = aboutCell;

    return cell;
}

- (NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section
{
    return 0;
}

#pragma mark UITableViewDelegate Methods


- (CGFloat)tableView:(UITableView *)tv
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 84;
}

- (void) tableView:(UITableView *)tv
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (0 == indexPath.row)
    {
    }
    else if (1 == indexPath.row)
    {
    }
    else if (2 == indexPath.row)
    {
    }
}


#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
    [tableView release];
    [newsCell release];
    [configureCell release];
    [aboutCell release];
}

RootViewController.h

@interface RootViewController : UIViewController
<UITableViewDataSource, UITableViewDelegate>
{
    UITableView *tableView;
    IBOutlet UIView *displaySplashScreen;
    IBOutlet UITableViewCell *newsCell, *configureCell, *aboutCell;
}

@property (nonatomic, retain) IBOutlet UITableView *tableView;

2 个答案:

答案 0 :(得分:3)

这里有一些问题。首先,您的AppDelegate标题应为:

@class RootViewController;

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    RootViewController *rootViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

然后,在实现中,将root添加到导航控制器,将navController添加到窗口,如下所示:

#import "RootViewController.h"

@implementation MyAppDelegate

@synthesize window;

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    rootViewController = [[RootViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] 
                                             initWithRootViewController:rootViewController];

    [window addSubview:[navController view]];
    [self.window makeKeyAndVisible];

    return YES;
}

答案 1 :(得分:1)

PengOne的回答是正确的,除了我做了一个小改动。这样做:

#import "RootViewController.h"

@implementation MyAppDelegate

@synthesize window;

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    rootViewcontroller = [[RootViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] 
                                         initWithRootViewController:rootViewController];

    self.window.rootViewController = navController;

    [self.window makeKeyAndVisible];
    return YES;
}

这是显示导航控制器的更好方法。正如PengOne所说,它必须是您的Interface Builder文件的问题。解开所有内容,然后再次将其挂起以查看问题是否仍然存在。如果是,请检查以确保所有内容都正确命名。祝你好运!