2012-02-26 13 views
0

私はiPhoneアプリを開発中です。 .mmファイルでメソッドを呼び出す必要があります。目的のCクラスから.mmファイルのメソッドを呼び出す方法

ViewHelper.h

- (void)testMtd; 

ViewHelper.mm(これは.mmある気づく)

- (void)testMtd{ 
    NSLog(@"Call reached mm"); 
} 

SomeViewController.m(インポート:ここでの問題の簡易版でありますViewHelper.hを分かりやすくするために省略)

- (void)someCallerMtd{ 
    NSLog(@"before"); 
    [viewHelper testMtd]; //call does not work 
    NSLog(@"after"); 
} 

ログに「before」と「after」が表示されますが、「Call reached mm」は表示されません。 .mmファイルのobjメソッドを呼び出す特別なルールはありますか?私はここで何が欠けていますか?

+0

はどのようにして 'viewHelper'を宣言し、初期化したのですか? – sch

+2

**。mm **ファイル内にクラスを書くと、それはまだ通常のObjective-Cクラスのままです。変更されるのは、**。mm **ファイル内でC++コードを呼び出すことだけです。 – sch

+0

@schはい私はinitの部分を逃した!ポインタと明確化reg。のためにありがとう。 – Ravi

答えて

1

まず、.mmファイルとは関係がありませんが、依然としてobjective-c clssです。第二に、あなたの間違いはViewHelperを割り当てていません。

解決策は、ViewHelperを割り当てるか、(void)testMtdを一般に公開することです。あなたの必要性に依存します。

どちらかあなたのSomeViewController.mを変更:

- (void)someCallerMtd{ 
    NSLog(@"before"); 
    viewHelper = [[ViewHelper alloc] init]; 
    [viewHelper testMtd]; 
    [viewHelper release]; 
    NSLog(@"after"); 
} 

たりViewHelperを変更:

//ViewHelper.h 
+ (void)testMtd; 

//ViewHelper.mm 
+ (void)testMtd{ 
    NSLog(@"Call reached mm"); 
} 

- (void)someCallerMtd{ 
     NSLog(@"before"); 
     [ViewHelper testMtd]; //remember to use ViewHelper class. not viewhelper. 
     NSLog(@"after"); 
    } 
+0

私は質問を投稿したとき、それは午前3時30分のようでしたが、どうしたらそれを逃しましたか?答えHelmiBに感謝します。 – Ravi

+0

喜んで助けてください:) .. – HelmiB

0

-testMtdメソッドが呼び出されない可能性が最も高い理由は、viewHelperがnilであることです。それがViewHelperクラスの有効なインスタンスを指していることを確認してください。 Objective-Cでは、nilポインタにメッセージを送るのは合法ですが、その場合はメソッドが呼び出されません。

関連する問題