-1

タイマーが繰り返し実行されないという問題があります。iOS のコーディングはまだ初心者ですが、この Web サイトで収集した内容と他の質問への回答から、うまくいくはずです。基本的に、タイマーは timerStart ボタンが押されたときに更新を開始し、timerStop ボタンが押されたときに停止する必要があります。

サンプル コードの .h ファイルを次に示します。

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

    @interface PGSecondViewController : UIViewController <CLLocationManagerDelegate>

    {
    NSTimer *Timer;
    IBOutlet UILabel *displayTimer;
    int ticks;

    }

    @property (nonatomic, retain) IBOutlet UILabel *displayTimer;

    -(IBAction)timerStart:(id)sender;
    -(IBAction)timerStop:(id)sender;
    -(void)updateTimer:(NSTimer *)theTimer;

    @end

そしてheres .mファイル

#import "PGSecondViewController.h"

@interface PGSecondViewController ()

@end

@implementation PGSecondViewController

@synthesize displayTimer;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    UITabBarItem *tbi = [self tabBarItem];
    [tbi setTitle:@"Start"];

    // Custom initialization
}
return self;
}


- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[displayTimer setText:@"00:00:00"];

}

}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}  

-(IBAction)timerStart:(id)sender;
{
Timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self     selector:@selector(updateTimer:) userInfo:nil repeats:YES];


}
-(IBAction)timerStop:(id)sender;
{
[Timer invalidate];
Timer = nil;
}

-(void)updateTimer:(NSTimer *)theTimer
{
if (ticks == nil)
{
    ticks = 0;
}
else
{
    ticks = ticks + 1;
}
[displayTimer setText:[NSString stringWithFormat:@" %d ", ticks]];

}


@end

基本的に、タイマーが1回開始され、NSLabelは0を表示しますが、その後は何も起こりません。[[NSRunLoop currentRunLoop] addTimer:Timer forMode:NSDefaultRunLoopMode] と [[NSRunLoop currentRunLoop] run] タイマーをスケジュールした後、試してみましたが、役に立ちません。

何か案は??

4

1 に答える 1

2

あなたの if(ticks == nil) は壊れています。ticks は int であり、オブジェクトではありません。その初期値は 0 になります。

その方法を少し変更して修正したところ、すべて正常に動作しました。

-(void)updateTimer:(NSTimer *)theTimer
{
    ticks++;
    [displayTimer setText:[NSString stringWithFormat:@" %d ", ticks]];
}
于 2013-01-15T20:59:56.080 に答える