2012-03-15 14 views
17

を使用してインスタンスに送信され、私のストーリーボードは次のようになります。http://d.pr/7yAY(droplr URL)認識されていないセレクタが、私はiOSアプリケーションのためのストーリーボードを使用していますストーリーボード

問題は、私は、ログインボタンをクリックしたときに、私が撮影したユーザ名を送っていますイベントテーブルビューコントローラに送信します。それを行うには、私は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 

throwed例外は次のとおりです。

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

+0

ストーリーボードの画像を更新できますか?それは現在404です。ありがとう – cwiggo

答えて

34

segueの宛先ビューコントローラは、イベントテーブルビューコントローラではなく、ナビゲーションコントローラです。

ナビゲーションコントローラのtopViewControllerプロパティにアクセスして、イベントコントローラを取得できます。

これを試してみてください:

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

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

それは、ありがとう – JohnnyAce

+0

これは私が探していたものです! – josh123a123

16

を代わりに、これを試してください: -

(それはjonkrollの答えとしてではなく、1行で同じことをして警告を削除し、「互換性のないポインタ型は初期化 『のViewControllerを* __強いです』タイプUIViewController *

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

素晴らしい1行の解決策。私のために働いた! – Groot

4

の発現を確認するために、もう一つは、あなたが適切にあなたの目的地が割り当てられていることであるViewCo Interface Builderで適切なクラスとしてのntrollerを使用します。デフォルトではUIViewControllerまたはUITableViewControllerなどになります。ゲッター/セッターでカスタムクラスを使用している場合は、Interface Builderのクラスを変更してそれに合わせて変更する必要があります。そうしないと、セレクタエラーメッセージが無効になります。

+0

はい+1、ありがとうございます。 – PeterPurple

+0

私はこれを忘れてしまったことを馬鹿に思う。 –

関連する問題