gpt4 book ai didi

cocoa - 使用绑定(bind)填充 NSOutlineView - KVO 添加项目

转载 作者:行者123 更新时间:2023-12-03 17:11:36 26 4
gpt4 key购买 nike

在我的一个项目中使用 NSOutlineView 之前,我创建了一个小型测试项目来使用它。我使用内容绑定(bind)到数组的 NSTreeController 成功显示了包含子项的项目列表。

Bindings on my NSTreeConroller

现在,当我创建这个对象时,我花了很长时间才意识到我的数组内容只有在我的 init 方法中创建它们时才会显示: - (id)初始化{ self = [ super 初始化];

if (self) {
results = [NSMutableArray new];

NSMutableArray *collection = [[NSMutableArray alloc] init];

// Insert code here to initialize your application
NSMutableDictionary *aDict = [[NSMutableDictionary alloc] init];
[aDict setValue:@"Activities" forKey:@"name"];

NSMutableArray *anArray = [NSMutableArray new];

for (int i; i<=3 ; i++) {
NSMutableDictionary *dict = [NSMutableDictionary new];
[dict setValue:[NSString stringWithFormat:@"Activity %d", i] forKeyPath:@"name"];
[anArray addObject:dict];
}

results = collection;

}

return self;
}

如果我将相同的代码放入 applicationDidFinishLaunching 中,它将不会显示这些项目。

当我尝试将项目添加到 View 时,我现在遇到了同样的问题。我对使用 NSTreeController 的理解是,它处理的内容类似于 NSArrayController 对 NSTableView 所做的事情(OutlineView 是一个子类)。但是,每当我使用符合 KV 的方法将项目添加到数组时,这些项目就不会显示在我的 View 中。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSMutableDictionary *cDict = [[NSMutableDictionary alloc] init];
[cDict setValue:@"Calls" forKey:@"name"];
[results addObject:cDict];
[outlineView reloadData];
}

我还尝试在添加对象后在outlineview上调用reloadData,但这似乎没有被调用。我错过了什么?

这是我的项目的链接:https://dl.dropboxusercontent.com/u/5057512/Outline.zip

最佳答案

找到这个答案后: Correct way to get rearrangeObjects sent to an NSTreeController after changes to nodes in the tree?

事实证明,NSTreeController会对performSelector:@selector(rearrangeObjects) withObject:afterDelay:使用react添加对象后调用此方法可以让新对象出现。

关于cocoa - 使用绑定(bind)填充 NSOutlineView - KVO 添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23441114/

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