2011-09-09 10 views
3

このカスタムクラスは、nslogを実行するテストメソッドだけで使用できます。私はこのメソッドを自分のアプリで何度も再利用するつもりです。インタフェースは次のようになります。そして、ビュー内の目的Cのカスタムクラスメソッドが呼び出されていない

@interface TestViewController: UIViewController { CMImageMover * imageMover } 

は、負荷をしたI:

imageMover = [[CmImageMover alloc] init]; 

私が行う場合は、次のalloc後

[imageMover testMethod]; 

右をし、それがのviewDidLoad機能で動作のinitが、私はそれを呼び出す場合もう一度ビューコントロール内の別の関数から何も動作せず、クラスメソッドが呼び出されません。

私はここで間違っていますか?他のすべてのvar私はNSArray/NSTimerのように宣言し、私は言って、私はアクセスし、私のコントローラ全体でそれを使用することができます。

+0

あなたはtestMethodの呼び出しを管理していない関数の本体を提供できますか? – matthias

+0

あなたは私たちにコーリングコードを提示する必要があります。それは "クラスメソッド"か "インスタンスメソッド"ですか? – an0

+0

このクラスのメソッドは次のとおりです。 - (void)testM { NSLog(@ "in test"); } – Mike007

答えて

2

「ビューコントローラ内の別の関数からもう一度呼び出すと何も動作しない」と言うと、最初に確認するのはtestMethodです。それは何も起こらない場合はゼロになる可能性があります。対称的なCでは、メッセージをnilに送ることは何もしません。見つけ出すためにNSLogを追加します。

NSLog(@"imageMover object is: %@", imageOver); 
[imageMover testMethod]; 

のNSLogは、それがnilであることを示している場合 - または狂気何か - そして、あなたはimageMoverのIVARでやっていることをフォローアップ。

あなたの質問にはクラスメソッドがありますが、コードスニペットでは参照しないでください。

クラスメソッドとしてtestMethodを定義した場合、そのメッセージをインスタンスに送信すると、もちろん失敗します。 (。そして、それは騒々しく失敗します)クラスメソッドは次のように導入される。

+ (void) testMethod 
{ 
     NSLog(@"CMImageMover testMethod called on Class"); 
} 

インスタンスメソッドは次のように導入される。これはすべてのあなたにものすごく明らかである場合

- (void) testMethod 
{ 
     NSLog(@"testMethod called on an instance of CMImageMover"); 
} 

謝罪と質問のポイントがありません。問題がどこにあるのかはあなたの質問からはっきりと分かりません。

+0

NSLog(@ "object is:%@"、[imageMover description]);私がtestMethodを呼び出す前に、それはnullだと言います。 – Mike007

+2

ああ、私はそれを修正しました。だから何が起こったのですか?私はviewDidLoadに多くのものが設定されています。私はそのクラスを作成して、viewDidLoadの最後にallocとinitを貼り付けました。最初に他の関数呼び出しは、割り当てられる前にtestmethodを呼び出すことでした。私はallocとinitをviewDidLoadの先頭に移動し、すべてのものが正常に動作します。私は散乱の脳です。私は+クラスメソッドで何か新しいことを学んだので、あなたの答えをマークしました – Mike007

関連する問題