我正在使用storyboard作为iOS应用程序,我的故事板看起来像这样:http://d.pr/7yAY(droplr url)
问题是当我单击登录按钮时,我将捕获的用户名发送到事件表视图控制器.为此我使用prepareForSegue函数,但显然当我尝试设置用户名时抛出异常.
我的代码如下:
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
- (IBAction) logintButton:(id)sender;
@property (weak, nonatomic) IBOutlet UITextField *username_tf; // textfield
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.m
#import "ViewController.h"
#import "EventsTableViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize username_tf;
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"ToMainApp"])
{
EventsTableViewController * dest = (EventsTableViewController *)[segue destinationViewController];
NSString * username = [[NSString alloc] initWithFormat:@"%@", username_tf.text];
[dest setUsername:username];
}
}
- (IBAction) logintButton:(id)sender
{
//NSLog(@"Logint button pressed");
[self performSegueWithIdentifier:@"ToMainApp" sender:sender];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[self setUsername_tf:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
Run Code Online (Sandbox Code Playgroud)
EventsTableViewController.h
#import <UIKit/UIKit.h>
@interface EventsTableViewController : UITableViewController
{
NSString * username;
}
@property (nonatomic, retain) NSString * username;
@end
Run Code Online (Sandbox Code Playgroud)
EventsTableViewController.m
#import "EventsTableViewController.h"
@interface EventsTableViewController ()
@end
@implementation EventsTableViewController
@synthesize username;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
...
@end
Run Code Online (Sandbox Code Playgroud)
抛出的异常是:
2012-03-15 14:19:27.304 StoryboardAssistance[30989:f803]
-[UINavigationController setUsername:]: unrecognized selector sent to instance 0x68abf60 2012-03-15 14:19:27.306
StoryboardAssistance[30989:f803] *** Terminating app due to uncaught
exception 'NSInvalidArgumentException', reason:
'-[UINavigationController setUsername:]: unrecognized selector sent to
instance 0x68abf60'
*** First throw call stack: (0x13c9022 0x155acd6 0x13cacbd 0x132fed0 0x132fcb2 0x28e6 0x43e4be 0xdb5ab 0x2974 0x13cae99 0x1614e 0x160e6
0xbcade 0xbcfa7 0xbc266 0x3b3c0 0x3b5e6 0x21dc4 0x15634 0x12b3ef5
0x139d195 0x1301ff2 0x13008da 0x12ffd84 0x12ffc9b 0x12b27d8 0x12b288a
0x13626 0x253d 0x24a5) terminate called throwing an exception(lldb)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
jon*_*oll 34
您的segue的目标视图控制器是您的导航控制器,而不是您的事件表视图控制器.
您可以通过访问导航控制器的topViewController属性来获取事件控制器.
试试这个:
UINavigationController *navController = (UINavigationController*)[segue destinationViewController];
EventsTableViewController *eventsController = [navController topViewController];
NSString * username = [[NSString alloc] initWithFormat:@"%@", username_tf.text];
[eventsController setUsername:username];
Run Code Online (Sandbox Code Playgroud)
Pat*_*ick 16
或者,试试这个: -
(它与jonkroll的答案相同,但在一行中删除警告"不兼容的指针类型初始化'ViewController*__ strong',表达式为UIViewController *"
NameOfViewController *vc = (NameOfViewController *)[[segue destinationViewController] topViewController];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25221 次 |
| 最近记录: |