3

を使用してNSTimerアニメーションを実行しています(今のところは単にそれと呼んでいますmyMethod)。ただし、クラッシュの原因になります。

コードは次のとおりです。

@implementation SecondViewController


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.


- (void) myMethod
{
    NSLog(@"Mark Timer Fire");

}


- (void)viewDidLoad
{ 
[super viewDidLoad];



NSLog(@"We've loaded scan");

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

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


}

そして、これがクラッシュ時の出力です

-[SecondViewController myMethod:]:認識されないセレクターがインスタンス0x4b2ca40に送信されました2012-06-21 12:19:53.297 Lie Detector [38912:207] *キャッチされない例外'NSInvalidArgumentException'、理由:'-[SecondViewController myMethod:] :認識されないセレクターがインスタンス0x4b2ca40に送信されました '

それで、私はここで何を間違っているのですか?

4

4 に答える 4

5

Swiftの使用中にこの問題が発生しました。Swiftで、NSTimerのターゲットオブジェクトがNSObjectでなければならないことを発見したことは明らかではないかもしれません。

class Timer : NSObject {
   init () { super.init() }
   func schedule() {
      NSTimer.scheduledTimerWithTimeInterval(2.0,
                             target: self,
                             selector: "myMethod",
                             userInfo: nil,
                            repeats: true)
  }
  func myMethod() {
     ...
  }
}

これが誰かに役立つことを願っています。

于 2015-01-17T16:51:41.363 に答える
4

どちらかしか使用できません

- (void)myMethod: (id)sender
{
 // Do things
}

または、実行できます(両方のメソッド名から:を削除します)。

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

これがあなたのお役に立てば幸いです

于 2012-06-21T19:55:30.110 に答える
3

これを交換してください

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

これで

[NSTimer scheduledTimerWithTimeInterval:2.0
                             target:self
                           selector:@selector(myMethod)
                           userInfo:nil
                            repeats:YES];
于 2012-06-21T19:29:23.857 に答える
2

タイマーのアクションメソッドは1つの引数を取る必要があります

- (void)myMethod: (NSTimer *)tim
{
     // Do things
}

このメソッドの名前はmyMethod:、コロンを含めてです。現在のメソッドの名前はコロンなしmyMethodでですが、タイマーを作成するには、次のメソッド名を渡します。selector:@selector(myMethod:)

現在、タイマーはメッセージmyMethod:をオブジェクトに送信します。オブジェクトはそれに応答せず(ただし応答しますmyMethod)、例外を発生させます。

于 2012-06-21T19:50:02.067 に答える