2011-02-09 11 views
0

私はこのコードを使用すると、アプリが動作します。リミット(iOS4を)

if ([self.navigationController respondsToSelector:@selector(showUpdateRecordModalWithFrontWord:andBackWord:)]) { 
     NSLog(@"seems to respond"); 
     [self.navigationController performSelector:@selector(showUpdateRecordModalWithFrontWord:andBackWord:) 
       withObject:[currentCard frontWord] withObject:[currentCard backWord]]; 


    } 

私は(下記)三番目のパラメータを追加した場合、私はSIGABRTを取得します。

if ([self.navigationController respondsToSelector:@selector(showUpdateRecordModalWithFrontWord:andBackWord:andNotes:)]) { 
     NSLog(@"seems to respond"); 
     [self.navigationController performSelector:@selector(showUpdateRecordModalWithFrontWord:andBackWord:andNotes:) 
             withObject:[currentCard frontWord] withObject:[currentCard backWord] withObject:[currentCard notes]]; 
    } 

方法はここにある:

- (id)showUpdateRecordModalWithFrontWord:(NSString *)arg_name1 andBackWord:(NSString *)arg_name2 andNotes:(NSString *)arg_name3 { 
    NSLog(@"%s", __FUNCTION__); 

    AppProductModalController *modal = [[AppProductModalController alloc] initWithNibName:nil bundle:nil]; 
    [modal setNewRecord: NO]; 
    [modal setDelegate: self.topViewController]; 
    [modal.navBar.topItem setTitle: @"Update Card"]; 
    [modal.frontWordField setText: arg_name1]; 
    [modal.backWordField setText: arg_name2]; 
    [modal.notesField setText: arg_name3]; 
    [self presentModalViewController:modal animated:YES]; 
    [modal release]; 
    return nil; 
} 

私はパラメータの上限に実行していますか、私は何か間違ったことをやっていますか?

私は任意の助けに感謝..

+0

メッセージを直接送信するのではなく、なぜ '-performSelector ...'を送信しますか?たとえば、 '[self.navigationController showUpdateRecordModalWithFrontWord:[currentCard frontWord] andBackWord:[currentCard backWord]]; ' –

答えて

3

NSObjectのはperformSelector:performSelector:withObject:performSelector:withObject:withObject:定義します。あなたが「オブジェクトを追加している」シーンの背後には魔法はありません。performSelector:withObject:withObject:withObject:のような方法はありません。おそらくあなたの最高の解決策は、performSelector:を経由するのではなく、メッセージを直接送信することです。セレクタは変化しないので、問題ではありません。

+0

'おそらくあなたの最善の解決策は、メッセージを直接に送信することです"ありがとう!それをどうやって行うのか正確に教えてもらえますか? –

+0

@David DelMonte:Bavariousが彼のコメントに書いたように、 '[self.navigationController showUpdateRecordModalWithFrontWord:[currentCard frontWord] andBackWord:[currentCard backWord]]'のようなものが動作するはずです。警告を受け取らないようにナビゲーションコントローラをキャストする必要があるかもしれませんが、それは基本的なメッセージ送信です。 – Chuck

+0

入手しました。ありがとう。私はBavariousのメッセージを見ませんでした。自己への注意>読むことを学ぶ。 –