我有一个绑定到类的NSTreeController。
NSOutlineView dirTree绑定到NSTreeController
特别是大纲视图内容绑定到arrangeObjects
这似乎运作良好,但我最终知道为什么它不响应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个子目录。
然而,它会查询7个子目录,包括已删除的项目“bZTree2”,并且不刷新显示以仅显示存在的6个。
答案 0 :(得分:1)
NSTreeController
不响应-reloadData
,因为它没有实现该方法。如果您尝试在NSTreeController
实例上调用它,则会收到运行时异常和编译器警告。
NSOutlineView
回复-reloadData
,但除非NSOutlineView
使用数据源,否则它不会执行任何操作。如果您使用的是NSTreeController
,则根本不会执行任何操作。
由于您似乎在创建文件系统视图,我强烈建议您通过数据源路由而不是使用NSTreeController
,这样可以省去很多麻烦。
Apple也有documentation和sample code这样做。