Objective c 如何创建Cocoa GUI来编辑NSDate对象数组?

Objective c 如何创建Cocoa GUI来编辑NSDate对象数组?,objective-c,cocoa,interface-builder,nsdate,cocoa-bindings,Objective C,Cocoa,Interface Builder,Nsdate,Cocoa Bindings,在我正在开发的一个应用程序中,我需要让用户编辑日期列表。我将这些NSDate对象放在一个数组中,并将其绑定到NSArrayController。我使用键路径arrangedObjects.self将NSTableColumn(表视图中唯一的列)绑定到该数组控制器。这很好用-我可以按照我想要的方式在表中显示所有日期,并且可以添加和删除日期 问题是我无法编辑表中的日期。如果我尝试,我会得到一个异常,告诉我,NSDate不是符合keyself的键值编码,这当然是正确的,没有setSelf:方法 我有两

在我正在开发的一个应用程序中,我需要让用户编辑日期列表。我将这些
NSDate
对象放在一个数组中,并将其绑定到
NSArrayController
。我使用键路径
arrangedObjects.self
NSTableColumn
(表视图中唯一的列)绑定到该数组控制器。这很好用-我可以按照我想要的方式在表中显示所有日期,并且可以添加和删除日期

问题是我无法编辑表中的日期。如果我尝试,我会得到一个异常,告诉我,
NSDate
不是符合key
self
的键值编码,这当然是正确的,没有
setSelf:
方法

我有两个办法来解决这个问题:

  • 让我的数组不要直接存储
    NSDate
    ,而是先将其放入
    NSMutableDictionary
    或其他对象中
  • 不允许用户直接编辑日期,但让用户删除错误的日期并重新添加更正的日期
  • 两种解决方案我都不喜欢。我不喜欢第一个,因为我必须在我的模型中添加一些东西,以使GUI正确。第二个不是很好用

    那么,有没有人知道是否有第三种甚至更好的方法来解决这个问题

    更新:临时解决办法 目前,我使用表视图的数据源来处理这个问题,而不是使用绑定。但我仍然想看看是否有更好的解决方案使用绑定来解决这个问题,因为我并不想每次出现这个(或类似的问题)时都编写一个数据源。这不仅发生在
    NSDate
    上,而且发生在cocoa提供的所有其他值类型类上,即使它们是可变的(比如
    NSMutableString

    更新

    似乎,由于NSDate没有可以设置的属性(与NSNumber一样),为了“编辑日期”,您必须用新创建的日期替换“旧”日期。日期必须是其他对象的属性或容器(如NSDateFormatter和Cocoa绑定的NSDictionary)的一部分,才能执行正确的操作


    为之前的噪音道歉-当我尝试以前从未尝试过的东西时,我似乎总能学到新东西。:-)

    当然,我是绑定到列的,我使用的是
    NSDateFormatter
    。但是我会试着把
    self
    放在关键路径之外。你说“当然”,就好像没有其他方法一样。它可以。:-)表本身可以绑定,人们会忘记使用格式化程序。我们无法知道,因为您没有在第一次修订中详细说明。无论如何,self的模型关键路径是错误的。在给定索引处排列的对象就是它自己。即使我省略了键路径的
    self
    部分,它也不会工作。编辑日期后,我收到一条错误消息,指出
    \uu NSCFDate
    不符合键
    的键值编码。对不起,我以前从未尝试过将NSDate对象加载到数组控制器的内容数组中。即使使用日期格式化程序,这也不起作用。您最初的想法是将其包含在NSMutableDictionary中,这似乎确实可以很好地进行编辑。我相信这是因为你不能修改日期。您创建了一个日期,如果您想更改它,您可以用另一个日期替换它。因此,它必须被包装在某物的属性中,或者被扔进字典中。更新我的答案以反映这一点。(因为这是一个有趣的测验,所以我一开始就错了。:-)