2011-07-21 6 views
0

次のコード部分があります。 UIpickerから任意の時間間隔を選択するときに実行されます。UIPickerを使用したTimeInterval関数の設定

if([[arrayNo objectAtIndex:row] isEqualToString:@"1 minutes"]) 
    time=60; 

if([[arrayNo objectAtIndex:row] isEqualToString:@"5 minutes"]) 
    time=300; 

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

UIPickerで「1分」と「5分」の2つの時間を定義しています。ユーザーが一度「1分」を選択すると、関数「updateMethod」は1分後に呼び出されます。しかし、ユーザーが再びUIPickerから自分の時間を「5分」に変更したとしよう。それから何が起こるでしょうか?タイマーは「5分」に設定されるか、または「1分」と「5分」の両方に設定されますか?

関数呼び出しを一度に設定するコードはどのように設計しますか? それは私の概念を助ける?

答えて

0

これが呼び出されるたびに、新しいタイマーをスケジューリングします。したがって、あなたの例では、両方を取得します。

私は一般的にこの理由からscheduledTimerWithTimeInterval:...をお勧めしません。タイマーをキャンセルする方法がありません。あなたはこのようNSTimer* IVARを作成する必要があります。あなたは新しいタイマーを設定するたび

@interface ... { } 
@property (nonatomic, readwrite, retain) NSTimer *updateTimer; 
@end 

@implementation ... 
@synthesize updateTimer=updateTimer_; 

- (void)setUpdateTimer:(NSTimer *)aTimer { 
    if (aTimer != updateTimer_) { 
    [aTimer retain]; 
    [updateTimer_ invalidate]; 
    [updateTimer_ release]; 
    updateTimer_ = aTimer; 
    } 
} 
... 
self.timer = [NSTimer timerWithTimenterval:60 target:self selector:@selector(updateMethod) userInfo:nil repeats:YES]; 

これは、自動的に古いタイマーをクリアします。

UI文字列(@ "1分")のロジックを基にして、これを他の言語に翻訳したい場合はローカリゼーションが中断されることに注意してください。代わりに、普通はrowを使用して値を決定するか、ラベルと値を保持する小さな辞書またはオブジェクトをarrayNoに追加します。

+0

投稿ありがとうございます。「self.timer」にエラーメッセージが表示されます。申し訳ありません、私はiPhoneアプリでは新しいです。 –

+0

私は間違いなく、プロパティではなくivarとしてupdateTimerを宣言しました。上記のコードで修正されました。 –

関連する問題