NSTIMER USERINFO。オブジェクトがセレクタにどのように渡されているのでしょうか。
質問
このコードを持っています:
-(void)startRotation:(RDUtilitiesBarRotation)mode {
rotationTimer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(rotateSelectedItem:) userInfo:[NSNumber numberWithInt:mode] repeats:YES];
}
-(void)rotateSelectedItem:(NSNumber*)sender {
float currAngle = [selectedItem currentRotation];
if ([sender intValue] == RDUtilitiesBarRotationLeft) {
[selectedItem rotateImage:currAngle - 1];
}
else {
[selectedItem rotateImage:currAngle + 1];
}
}
-(void)stopRotation {
[rotationTimer invalidate];
rotationTimer = nil;
}
.
ユーザーがボタンを保持している間にビューを回転させています。ユーザーがリリースするとタイマーが停止します。
しかし、私はこれを与えています:
- [__ nscftimer intvalue]:インスタンス0x4ae360 に送信された認識されていないセレクタ
しかし、私がuserinfoをuserInfo a nsnumberクラスで一時停止しているなら、なぜタイマーを受けていますか?
ありがとう。
解決
Your timer action method should look like this
-(void)rotateSelectedItem:(NSTimer*)sender
You can get at the userInfo by doing
NSNumber *userInfo = sender.userInfo;
他のヒント
You misunderstood the signature of the selector that you register with the timer. The sender is NSTimer*
, not the userInfo object that you pass into its constructor:
-(void)rotateSelectedItem:(NSTimer*)sender
{
float currAngle = [selectedItem currentRotation];
if ([sender.userInfo intValue] == RDUtilitiesBarRotationLeft)
{
[selectedItem rotateImage:currAngle - 1];
}
else
{
[selectedItem rotateImage:currAngle + 1];
}
}
From the documentation:
The message to send to target when the timer fires. The selector must have the following signature:
- (void)timerFireMethod:(NSTimer*)theTimer
所属していません StackOverflow