パネル内に毎秒起動しようとしているタイマーがありますが、起動できないようです。私は次のようにパネルを作成しています:
// Begin our sheet
[NSApp beginSheet: targetController.window
modalForWindow: self.window
modalDelegate: self
didEndSelector: nil
contextInfo: nil];
次に、私の targetController には次のものがあります。
- (void) awakeFromNib
{
NSLog(@"awakeFromNib.");
displayUpdateTimer = [NSTimer timerWithTimeInterval: 1.0
target: self
selector: @selector(updateDisplay:)
userInfo: nil
repeats: TRUE];
[[NSRunLoop currentRunLoop] addTimer: displayUpdateTimer
forMode: NSModalPanelRunLoopMode];
}
私の理解では、タイマーを に追加することでこれを正しく行っていますがNSModalPanelRunLoopMode
、そうしても updateDisplay: セレクターは起動しません。
ここで私が間違っていることについて何か考えがある人はいますか?
注:私も試しNSDefaultRunLoopMode
ましたが、違いはありませんでした。タイマーはまだ起動されていません。
編集:私の全体的な目標は次のとおりです-
私のパネルには、(複数のスレッドから) 一度に多くの項目を追加できるテーブル ビューがあります。そのため、アイテムを一時配列に追加し、タイマーが起動すると、一時配列からメイン配列にアイテムを追加し、テーブルをリロードします。以下は、これを行うコードのサンプルです。
- (void) addOverwriteObject: (id) overwriteObject
{
@synchronized(newObjects)
{
// Add our overwrite object
[newObjects addObject: overwriteObject];
} // End of overwriteObject
} // End of addOverwriteObject
そして、タイマーが更新されたときに起動するメソッド:
- (void)updateDisplay:(id)sender
{
@synchronized(newObjects)
{
if(newObjects.count > 0)
{
[overwriteObjects addObjectsFromArray: newObjects];
[newObjects removeAllObjects];
[tableView reloadData];
} // End of newObjects has entries
} // End of newObjects sync
} // End of updateDisplay
残念ながら、タイマーが起動しないと、テーブルにエントリがまったくありません。
以下は、まさに私がやろうとしていることのスクリーンショットです (エントリはメイン配列に直接追加されています)。