gpt4 book ai didi

objective-c - 添加/删除由 NSArrayController 管理的 NSMutableArray 的最佳方法

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

我有一个 NSMutableArray (包含 NSMutableDictionary 实例)绑定(bind)到 NSArrayController (NSArrayController 是依次绑定(bind)到 NSTableView 列)。

什么是对 Cocoa 和 KVO 最友好的方式,以编程方式:

  • 向数组添加一个新的空对象 (NSMutableDictionary)?
  • 要删除当前选定的对象吗? (删除后,应选择前一项 - 如果存在 - )

我一直以一种我不太喜欢的方式来做这件事 - 而且我确信这不是最好的方法(对于如此简单的事情来说,代码行太多:在 Cocoa 中,这表明对这个主题的错误看法:-))。

<小时/>

我的代码(实际上有点矫枉过正):

<小时/>

添加到数组

NSMutableArray* oldParams = [paramsArray mutableCopy];

[oldParams addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Parameter",@"Parameter",@"",@"Value", nil]];
[self setParamsArray:oldParams];

[paramsController setSelectionIndex:[paramsArray count]-1];

从数组中删除当前选定的对象

if ([paramsArray count]>0)
{
int s = [paramsController selectionIndex];

NSMutableArray* oldParams = [paramsArray mutableCopy];

[oldParams removeObjectAtIndex:s];

[self setParamsArray:oldParams];

if (s<=[paramsArray count]-1)
[paramsController setSelectionIndex:s];
else
[paramsController setSelectionIndex:[paramsArray count]-1];
}

那么,您对此有何看法?

最佳答案

鉴于数组 Controller 绑定(bind)到某个对象上名为 paramsArray 的属性,最好的方法是定义键值编码 indexed accessors在该对象的类上。然后,使用这些访问器以符合 KVO 的方式改变属性所表示的对多关系。

例如,实现 -insertObject:inParamsArrayAtIndex:,然后使用它来添加对象。如果您喜欢 NSMutableArray 的 -addObject: 方法的便利性,您可以编写一个 -addObjectToParamArray 方法,该方法转发到 -insertObject:inParamsArrayAtIndex:。

顺便说一句,“paramsArray”对于属性来说是一个糟糕的名称。属性名称不应编码用于实现它的类型。如果您查看索引访问器名称的模板,您会发现 Apple 希望多对多关系属性只是复数名词,如“params”(而不是“Array”)。例如,-paramsAtIndexes: 优于 -paramsArrayAtIndexes:。

关于objective-c - 添加/删除由 NSArrayController 管理的 NSMutableArray 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995594/

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