我有一个绑定到类的NSTreeController。
NSOutlineView dirTree绑定到NSTreeController
特别是大纲视图内容绑定到arrangedObjects
这似乎工作得很好,但我无计可施,想弄清楚为什么它不响应reloadData。
NSTreeController密钥路径为:-
Children subDirectories
Count numberOfSubDirs下面列出了这些参数;numberOfSubDirs返回subDirectories的简单计数(带有附加的诊断显示)。
- (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 1NSTreeController在父目录“共享”上调用numberOfSubDirs,并被正确地告知它现在有6个子目录。
但是,它随后查询7个子目录,包括已删除的项"bZTree2",并且不刷新显示以仅显示存在的6个子目录。
发布于 2011-09-15 11:54:26
NSTreeController不响应-reloadData,因为它没有实现该方法。如果您尝试在NSTreeController实例上调用它,您将同时获得运行时异常和编译器警告。
NSOutlineView响应-reloadData,但除非NSOutlineView使用数据源,否则它不会执行任何操作。如果你使用的是NSTreeController,它根本不会做任何事情。
由于您似乎要创建一个文件系统视图,所以我强烈建议您使用数据源路由,而不是使用NSTreeController,这将为您省去很多麻烦。
苹果也有一些documentation和sample code可以做到这一点。
https://stackoverflow.com/questions/7425514
复制相似问题