NSTableViewが内部にあるMacアプリがあると仮定します(NSTableViewからサブレーザーされたDownloadTableViewとNSActionCellからサブレーザーされたDownloadCellを使用して、プログレスバーとアイテムに関連するすべての情報を表示します)。アプリコントローラー内には、tableView(ダウンロード)に表示されるオブジェクトを保持するためのNSMutableArrayがあります。現在、コントローラーにタイマーがあり、[[self tableView] reloadData]
各オブジェクトの進行状況を毎秒表示します(ダウンロード)。
mutableArrayから1つの要素を削除しようとすると、競合状態(したがって例外)が発生することが多いため、これがtableViewを更新するための最良の方法ではないと思います。たとえば、ビューは現在更新中であり、配列から1つの要素を削除しました。アプリが内部- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
で文句を言う可能性があります。[downloadCellsetRepresentedObject:download]ダウンロードが配列に含まれなくなった可能性があるため、配列の範囲外であるという例外が発生します。または、オブジェクトを削除して配列に再度追加する必要がある要素をドラッグアンドドロップした場合。
誰かがその主題についてより良い考えを持っていますか?