【发布时间】:2011-01-20 16:42:27
【问题描述】:
我有一个登录视图,在检查用户名后我想进入一个表格视图。 我从苹果示例代码下载了 SimpleDrillDown 应用程序,我希望在运行应用程序时首先查看登录页面,然后查看 TableView。
如果有人有时间可以在这里找到该项目: http://developer.apple.com/iphone/library/samplecode/SimpleDrillDown/index.html
我所做的更改是:
SimpleDrillDownAppDelegate.m
导入“SimpleDrillDownAppDelegate.h” 导入“RootViewController.h” 导入“LoginViewController.h” 导入“DataController.h” @implementation SimpleDrillDownAppDelegate @synthesize 窗口; @synthesize 导航控制器; @synthesize 根视图控制器; @synthesize 登录视图控制器; @synthesize 数据控制器; - (void)applicationDidFinishLaunching:(UIApplication *)application { //托马斯添加这个 LoginViewController *_loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:[NSBundle mainBundle]]; self.loginViewController = _loginViewController; // [_loginViewController 发布]; // //托马斯添加这个 // 创建数据控制器。 //DataController *controller = [[DataController alloc] init]; // self.dataController = 控制器; // [控制器释放]; //rootViewController.dataController = dataController; /* 导航和根视图控制器在主 nib 文件中创建。 使用导航控制器的视图配置窗口,然后显示它。 */ //thomas 对此进行了评论并将其复制到 LoginView //[窗口 addSubview:[navigationController 视图]]; //托马斯添加这个 [窗口添加子视图:[loginViewController 视图]]; //托马斯添加这个 [窗口 makeKeyAndVisible]; } - (无效)dealloc { //[navigationController 发布]; //[rootViewController 发布]; [loginViewController 发布]; [窗口释放]; //[数据控制器发布]; [超级释放]; } @结尾SimpleDrillDownAppDelegate.h
@class 数据控制器; @class RootViewController; @class 登录视图控制器; @interface SimpleDrillDownAppDelegate : NSObject { UIWindow *窗口; UINavigationController *navigationController; 根视图控制器 *根视图控制器; 登录视图控制器 *登录视图控制器; 数据控制器 *数据控制器; } @property (nonatomic, 保留) IBOutlet UIWindow *window; @property (nonatomic, 保留) IBOutlet UINavigationController *navigationController; @property(非原子,保留)IBOutlet RootViewController *rootViewController; @property (nonatomic, 保留) IBOutlet LoginViewController *loginViewController; @property (nonatomic, 保留) DataController *dataController; @结尾LoginViewController.h
#进口 @class 数据控制器; @class RootViewController; @class 登录视图控制器; @interface 登录视图控制器:UIViewController { 数据控制器 *数据控制器; IBOutlet UITextField *usernameField; IBOutlet UITextField *passwordField; IBOutlet UIButton *loginButton; IBOutlet UIActivityIndicatorView *loginIndicator; UINavigationController *navigationController; 根视图控制器 *根视图控制器; } @property (nonatomic, 保留) UITextField *usernameField; @property (nonatomic, 保留) UITextField *passwordField; @property (nonatomic, 保留) UIButton *loginButton; @property (nonatomic, 保留) UIActivityIndicatorView *loginIndicator; @property (nonatomic, 保留) IBOutlet UINavigationController *navigationController; @property (nonatomic, 保留) DataController *dataController; @property(非原子,保留)IBOutlet RootViewController *rootViewController; -(IBAction)登录:(id)发件人; @结尾LoginViewController.m
#import "LoginViewController.h" #import "数据控制器.h" #import "RootViewController.h" @implementation 登录视图控制器 @synthesize 用户名字段; @synthesize 密码字段; @synthesize 登录按钮; @synthesize 登录指示符; @synthesize 导航控制器; @synthesize 数据控制器; @synthesize 根视图控制器; /* // 指定的初始化器。如果您以编程方式创建控制器并希望执行不适合 viewDidLoad 的自定义,请覆盖。 - (id)initWithNibName:(NSString *)nibNameOrNil 包:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // 自定义初始化 } 回归自我; } */ /* // 实现 loadView 以编程方式创建视图层次结构,无需使用 nib。 -(无效)加载视图{ } */ /* // 实现 viewDidLoad 以在加载视图后进行额外的设置,通常来自 nib。 - (void)viewDidLoad { [超级视图DidLoad]; } */ /* // 覆盖以允许默认纵向以外的方向。 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // 对于支持的方向返回 YES return (interfaceOrientation == UIInterfaceOrientationPortrait); } */ - (void)didReceiveMemoryWarning { // 如果没有超级视图,则释放视图。 [super didReceiveMemoryWarning]; // 释放所有未使用的缓存数据、图像等。 } - (void)viewDidUnload { // 释放主视图的所有保留子视图。 // 例如self.myOutlet = nil; } - (无效)dealloc { [超级释放]; } - (IBAction)登录:(id)发件人 { // TODO: 产生一个登录线程 NSString *userName = usernameField.text; NSString *pass = passwordField.text; loginIndicator.hidden = FALSE; [loginIndicator 开始动画]; loginButton.enabled = FALSE; //在此处硬编码凭据 if ([userName isEqualToString: @"test"] && [pass isEqualToString: @"test"]){ // 创建数据控制器。 DataController *controller = [[DataController alloc] init]; self.dataController = 控制器; [控制器释放]; rootViewController.dataController = 数据控制器; [self pushViewController:self.navigationController动画:YES]; }别的{ printf("错误"); } } @结尾我终于得到了这个错误
错误日志
2010-02-24 21:19:55.595 SimpleDrillDown [97651:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[LoginViewController pushViewController:animated:]:无法识别的选择器发送到实例 0x190d8a0 ' 2010-02-24 21:19:55.595 SimpleDrillDown[97651:207] 堆栈:( 807902715, 2501092617, 808284155, 807854166, 807706786, 18813, 814709201, 815110321, 815119058, 815114808, 814812979, 814722763, 814748641, 839148405, 807687520, 807683624, 839142449, 839142646, 814752238, 9140, 8994 )抱歉,这篇文章很长,但我不知道在哪里可以搜索我在这里读到了一篇文章的语气:(
提前谢谢大家
【问题讨论】:
标签: iphone uitableview