クラスへのバインディングを持つ NSTreeController があります。
NSOutlineView dirTree は NSTreeController にバインドします
具体的には、Outline View Content は ArrangedObjects にバインドします
これはうまく機能しているように見えますが、reloadData に応答しない理由を突き止めようとしています。
NSTreeController キー パスは次のとおりです。
Children subDirectories
Count numberOfSubDirs
これらは以下にリストされています。numberOfSubDirs は、サブディレクトリの単純な数を返します (診断表示が追加されています)。
- (NSArray *)subDirectories {
if (subDirectories == nil) {
[self loadSubDirectories];
}
return subDirectories;
}
- (NSInteger)numberOfSubDirs {
NSArray *tmp = [self subDirectories];
NSLog(@"numberOfSubDirs %@ %d", [self relativePath], [tmp count]);
return [tmp count];
}
データを更新するリフレッシュ関数を呼び出すと、[dirTree reloadData] が呼び出されます。次の出力が得られます:-
Reload Data
numberOfSubDirs Shared 7
numberOfSubDirs Adobe 1
numberOfSubDirs bZTree2 0
numberOfSubDirs Ian Documents 25
numberOfSubDirs Library 1
numberOfSubDirs NET 1
numberOfSubDirs TSA 12
numberOfSubDirs Wacom 1
ディレクトリを削除して (Finder の外部で)、更新機能を呼び出すと、次の出力が得られます。
Reload Data
numberOfSubDirs Shared 6
numberOfSubDirs Adobe 1
numberOfSubDirs bZTree2 0
numberOfSubDirs Ian Documents 25
numberOfSubDirs Library 1
numberOfSubDirs NET 1
numberOfSubDirs TSA 12
numberOfSubDirs Wacom 1
NSTreeController は、親 "Shared" で numberOfSubDirs を呼び出し、現在 6 つのサブディレクトリがあることを正しく通知されます。
ただし、削除されたアイテム「bZTree2」を含む 7 つのサブディレクトリを照会し、存在する 6 つだけを表示するように表示を更新しません。