1

こんにちは、私はcocos2dを使用してiphoneアプリを開発しています。このメッセージが表示されます。

2009-01-26 16:17:40.603 Find The Nuts[449:20b] *** -[NSCFArray onTimer:]: unrecognized selector sent to instance 0x59be030
2009-01-26 16:17:40.605 Find The Nuts[449:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFArray onTimer:]: unrecognized selector sent to instance 0x59be030'  

ここでonTimerはカウントダウンタイマーメソッドです。その解決策は何ですか?

4

4 に答える 4

4

onTimer メソッドが何らかの理由で NSArray のインスタンスに送信されています。誤って NSArray の実際のインスタンスに送信しているか、実際に送信しようとしているオブジェクトが、タイマーが実際に起動するまでに解放されている (つまり、アクセスできなくなっている) 可能性があります。

タイマー ターゲットが不適切な時間に解放されているかどうかを確認するために、メモリのデバッグを試みます。すべてが正常に見える場合は、タイマー ターゲットを正しいオブジェクトに設定していることを確認します。

于 2009-01-26T11:13:16.923 に答える
3

認識されないセレクターエラーは、@selectorパラメーターに間違ったテキストを渡していることが原因である可能性があります。セレクター名には、署名にパラメーターがある場合は常に':'属性を含める必要があります。だから、あなたがタイマー方式を持っているなら

-(void) onTimer:(NSTimer*)timer { ... }

渡すセレクターは次のscheduledTimerWithTimeIntervalとおりです。

@selector(onTimer:)   // note the ':' at the end of the name!

NSTimerへの完全な呼び出しは、次のようになります。

[NSTimer scheduledTimerWithTimeInterval:1 
                                 target:self 
                               selector:@selector(OnTimer:) // note the ':'
                               userInfo:nil
                                repeats:NO];
于 2009-06-15T03:22:48.070 に答える
0

カウントダウンの完了時に呼び出す有効なメソッドをタイマーに提供していないようです。メソッド セレクターとターゲットの両方を有効なオブジェクトに設定する必要があります。以下の例を参照してください。

[NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

- (void)onTimer {
     NSLog(@"hello!"];
}

もしかしたら、ターゲットが戻ってくる前に解放されているのでしょうか?

また、例外が発生したときにトラップする次のブレークポイントを追加してみてください。

objc_exception_throw および -[NSException raise]。iPhone では、すべての例外が objc_exception_throw を通過すると思いますが、Mac OS X Tiger 以前をターゲットにしている場合は、両方にブレークポイントを設定する必要があります。

http://www.cocoadev.com/index.pl?DebuggingTechniquesには、さらに多くのデバッグ手法があります。

トニー

于 2009-01-26T10:54:10.813 に答える
0

NSArray オブジェクトで onTimer メソッドが呼び出されるのはなぜですか? あなたの説明から、onTimerにはこの定義があると思います

-(void)onTimer:(NSTimer *)aTimer

その場合、onTimer はビューコントローラー (または作成した別のクラス) のメソッドですが、配列のメソッドではありません。タイマーをどのように呼び出していますか?このメソッドを呼び出すタイマーを開始する正しい方法は次のとおりです。

[NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES];

このエラーが発生する理由は、タイマーを適切に呼び出していないか、割り当てが解除されたオブジェクトを使用していることが原因です。

于 2009-01-27T06:21:35.640 に答える