1

これを実現するための最善のアプローチを考えています。

サンプルアプリは次のとおりです。-テキストフィールドとボタンがあります。ボタンをクリックして、テキストフィールドを更新するタスクを開始します。ただし、テキストフィールドはタイマーで(またはバックグラウンドで)更新する必要があります。たとえば、1秒ごとに更新する必要がありますが、タイマーを実行する必要があるのは、たとえば5秒間だけで、たとえばランダムなテキストを入力します。

これにより、テキストボックスに毎秒ランダムな単語が表示されているように見えます。5秒が完了すると、タイマーが停止し、最後の値がテキストボックスに残ります。

ただし、停止イベントを検出してから、テキストフィールドの値を取得して、別のアクションを実行する必要もあります。

最後に質問:-

タイマーイベント、または操作とキューを使用する必要がありますか?どちらのアプローチが最適かわからない。

4

3 に答える 3

0

NSTimer はメイン スレッドでのみ動作するため、バックグラウンドで起動した場合に起動することを期待する必要はありません。また、基本的には優れたアーキテクチャの問題だと思います-イベントを処理してテキストフィールドを更新したくないですか? たとえば、何らかのタスクが終了したときや表示値が変更されたときにイベントを処理し、delegate/block/NSNotification を使用してイベントを受け取り、UI を更新します。

于 2012-11-17T10:18:07.593 に答える
0

はい、この方法でタイマーを使用しrepeats:YESてください。必要なものは次のとおりです。

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

- (void) ChangeText 
{
  _textfield.text = [nsstring stringwithformat:@"%@%@", _textfield.text, _yourstring];
}
于 2012-11-17T08:12:23.340 に答える
0

はい、上記の答えは正しいです。質問に応じていくつかの小さな変更が必要です...

  count = 0;

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

 - (void) ChangeText 
  {
    if (count < 5)
    {
      _textfield.text = [nsstring stringwithformat:@"%@%@", _textfield.text, _yourstring];
    }
    else
    {
      //Start your next event here;
    }
于 2012-11-17T09:22:54.383 に答える