gpt4 book ai didi

cocoa - NSTreeController 不响应 reloadData

转载 作者:行者123 更新时间:2023-12-03 18:00:21 25 4
gpt4 key购买 nike

我有一个 NSTreeController,它绑定(bind)到一个类。

NSOutlineView dirTree 绑定(bind)到 NSTreeController

特别是大纲 View 内容绑定(bind)到排列对象

这似乎工作得很好,但我束手无策,想弄清楚为什么它不响应 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 个子目录。

最佳答案

NSTreeController 不响应 -reloadData 因为它没有实现该方法。如果您尝试在 NSTreeController 实例上调用它,您将同时收到运行时异常和编译器警告。

NSOutlineView 响应 -reloadData,但除非 NSOutlineView 使用数据源,否则它不会执行任何操作。如果您使用 NSTreeController 它根本不会做任何事情。

由于您似乎正在创建文件系统 View ,因此我强烈建议您通过数据源路由而不是使用 NSTreeController,这会为您省去很多麻烦。

苹果有一些documentationsample code也为了这样做。

关于cocoa - NSTreeController 不响应 reloadData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com