2012-03-15 97 views
17
我用故事板

的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 

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); 
} 

EventsTableViewController.h

#import <UIKit/UIKit.h> 

@interface EventsTableViewController : UITableViewController 
{ 
    NSString * username; 
} 

@property (nonatomic, retain) NSString * username; 

@end 

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 

該扔的例外是:

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) 

有什麼建議?

+0

你可以做一個步驟調試,並找出它實際上崩潰的哪一行?另外''NSString * username = [[NSString alloc] initWithFormat:@「%@」,username_tf.text];'可以是'NSString * username = username_tf.text'。 – Gobot 2012-03-15 20:43:50

+0

你可以更新故事板的圖像嗎?目前是404。謝謝 – cwiggo 2015-04-27 09:33:22

回答

34

您的segue的目標視圖控制器是您的導航控制器,而不是您的Events Table View控制器。

您可以通過訪問導航控制器的topViewController屬性來獲取事件控制器。

試試這個:

UINavigationController *navController = (UINavigationController*)[segue destinationViewController]; 
EventsTableViewController *eventsController = [navController topViewController]; 

NSString * username = [[NSString alloc] initWithFormat:@"%@", username_tf.text]; 
[eventsController setUsername:username]; 
+1

就是這樣,謝謝 – JohnnyAce 2012-03-15 22:40:21

+0

這正是我一直在尋找的! – josh123a123 2015-01-06 22:26:33

16

另外,試試這個: -

(它確實同jonkroll的答案,但在同一行,並刪除警告「不兼容的指針類型初始化‘的ViewController * __強’與UIViewController *型「的表達

NameOfViewController *vc = (NameOfViewController *)[[segue destinationViewController] topViewController]; 
+1

偉大的一線解決方案。爲我工作! – Groot 2012-12-12 09:42:21

4

另一件要驗證的是,你已經正確地分配你的目的地ViewCo ntroller作爲Interface Builder中的適當類。默認情況下,這將是UIViewControllerUITableViewController等。如果您有一個帶getters/setters的自定義類,則需要記住更改Interface Builder中的類以相應地進行反映,否則您將收到無效的選擇器錯誤消息。

+0

是的+1,謝謝。 – PeterPurple 2014-01-23 18:45:19

+0

我感到很蠢,我忘了這麼做,謝謝提醒。 – 2014-12-25 15:43:01