RootViewController没有在NIB中加载

时间:2012-01-20 19:13:51

标签: iphone objective-c ios5

我正在尝试按照Inferis / ViewDeck库here的功能示例进行操作。但是根视图控制器正在加载但未传递到我的登录视图。我使用登录视图代替View Deck Choices View。

APAppDelegate.h

#import <UIKit/UIKit.h>
@class LoginController;

@interface APAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

APAppDelegate.m

#import "APAppDelegate.h"
#import "RootViewController.h"

@implementation APAppDelegate

@synthesize window = _window;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    RootViewController *rootController = (RootViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"RootViewController"];
    self.window.rootViewController = rootController;//[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
    [self.window makeKeyAndVisible];
    return YES;
}

我必须使用MainStoryboard,因为我使用的是故事板并使用了xib。通过在appdelegate中尝试initwithNibName,我收到一条错误消息,指出RootViewController不存在。

RootViewController.h

#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController
{

}

@property (nonatomic, retain) IBOutlet UIView *loginView;
@property (nonatomic, retain) UINavigationController *navController;

@end

RootViewController.m

#import "RootViewController.h"
#import "IIViewDeckController.h"
#import "LoginController.h"
#import "SideMenuView.h"
#import "APCustomerViewController.h"

@implementation RootViewController
@synthesize loginView = _loginView;
@synthesize navController = _navController;
- (void)viewDidLoad
{
    NSLog(@"RootViewController viewDidLoad");
    [super viewDidLoad];

    // Override point for customization after application launch.
    LoginController *loginController = [[LoginController alloc] initWithNibName:@"LoginController" bundle:nil];

    self.navController = [[UINavigationController alloc] initWithRootViewController:loginController];
    self.navController.navigationBar.tintColor = [UIColor darkGrayColor];

    self.navController.view.frame = self.loginView.bounds;
    [self.loginView addSubview:self.navController.view];
    NSLog(@"End RootViewController viewDidLoad");
}

LoginController.h

#import <UIKit/UIKit.h>
@class KeychainItemWrapper;
@class DataClass;

@interface LoginController : UITableViewController <UITextFieldDelegate>
{
    IBOutlet UITextField *userField;
    IBOutlet UITextField *passwordField;
    IBOutlet UISwitch *saveLogin;
    UIActivityIndicatorView *activitySpinner;
    KeychainItemWrapper *keychain;
    DataClass *dataObj;

    id delegate;
}

@property (nonatomic, retain) IBOutlet UITextField *userField;
@property (nonatomic, retain) IBOutlet UITextField *passwordField;
@property (nonatomic, retain) IBOutlet UISwitch *saveLogin;
@property (nonatomic, retain) id delegate;

@end

LoginController.m

- (void)viewDidLoad
{
    NSLog(@"LoginController viewDidLoad");
    [super viewDidLoad];
    [userField setDelegate:self];
    [passwordField setDelegate:self];
    TextFieldDelegate *myDelegate = [[TextFieldDelegate alloc] init];
    [self setDelegate:myDelegate];
    //set the delegate's currentViewController property so that we can add a subview to this View. 


    activitySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activitySpinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    activitySpinner.center = self.view.center;
    [self.view addSubview:activitySpinner];

    keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"APLogin" accessGroup:nil];
    [userField setText:[keychain objectForKey:(__bridge id)kSecAttrAccount]];
    [passwordField setText:[keychain objectForKey:(__bridge id)kSecValueData]];

    if ([userField text] != @"" && [passwordField text] != @"") {
        [saveLogin setOn:YES];
    }

    dataObj = [DataClass getInstance];

    // Do any additional setup after loading the view from its nib.
}

日志文件

GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Thu Nov  3 21:59:02 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".sharedlibrary apply-load-rules all
Attaching to process 18487.
2012-01-20 11:56:11.586 Appointment-Plus[18487:f803] RootViewController viewDidLoad
2012-01-20 11:56:11.589 Appointment-Plus[18487:f803] End RootViewController viewDidLoad

我在storyboard笔尖中拥有的所有类名与类文件相同。正如您所看到的,RootViewController viewDidLoad完全运行但是LoginController根本没有运行。我正在尝试从RootViewController运行LoginController。

我的最终目标是将Facebook样式菜单滑出,但仅限于某些页面。将使用该菜单的页面位于LoginController之后。

1。)用户打开应用程序并获取登录页面 2.)用户使用facebook ios样式菜单登录并获取主页面 3.)当用户点击某个项目时,它可以转到一个没有侧边菜单的新页面。

根据我的理解,需要RootViewController才能管理所有这些。

1 个答案:

答案 0 :(得分:0)

我决定不使用该库,只使用了根视图控制器并创建了我自己的幻灯片菜单。