3

我正在构建一个表格以在我的首选项窗格中显示一些数据。所有数据都存在于 NSUserDefaults 中。表格中有一个复选框可以启用/禁用所列设备的数据。复选框是唯一可编辑的单元格。

该表正确显示来自共享用户默认值的数据。所以我知道我已将表格内容正确映射到正确的共享用户默认模型密钥路径。但是,当我切换复选框时,新数据根本不会写入默认值。

这是复选框设置的一瞥...

在此处输入图像描述

我尝试将选择器操作分配给 NSButton(复选框),认为我可以以编程方式设置默认值。奇怪的是,这个动作永远不会被触发。我设置了一个简单的操作,只是做了一个 NSLog。单击复选框时它从未被触发。

更新:这样您就可以看到我的默认数据结构是什么样的,这是默认命令的输出。这张表后面实际上没有任何代码。

{
    ClimateDeviceData =     (
                {
            deviceName = Nest;
            deviceSetting = "76";
            display = 1;
            structure = Home;
            uuid = d01AA02AB145204VR;
        }
    );
    ClimateLoginAtLaunch = 1;
    ClimateMenuBarIconStyle = "Nest Temp Settings";
}

更新#2:此时我会接受一个解决方案,即简单地能够从复选框中调用选择器。

4

3 回答 3

1

我在应用程序中做大致相同的事情。不完全一样,但基本原理是一样的。一个填充有绑定的表格,其中有一个按钮(可以是复选框或其他按钮,没关系)。

我尝试了按钮上的操作,但它也不起作用,所以最后我使用了 KVC 概念。

  • 我在 XIB 中使用 arrayController 在我的代码中引用一个可变数组,该数组存储具有状态属性(布尔值)的自定义对象的多个实例。
  • 基于视图的 tableview 使用排列对象控制器键绑定到 arrayController。
  • 按钮绑定到 tableCellView (排列的对象),使用 keyPath: objectValue.status (有效地获取该行上自定义对象的状态属性)。

在我的控制器代码中,我使用以下几行来创建包含自定义对象的可变数组:

  smartApp *appFound = [[smartApp alloc] initWithApplicationIdentifier:key];

  if (appFound)
  {
      [appFound setStatus:[NSNumber numberWithBool:YES]];

      [appFound addObserver:self
                 forKeyPath:@"status"
                    options:(NSKeyValueObservingOptionNew |
                             NSKeyValueObservingOptionOld)
                    context:NULL];

      [_appsArray addObject:appFound];
  }

我在该对象的“状态”键路径上添加了一个观察者。我添加了待处理的代码,观察对象的值变化:

- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)anObject
                    change:(NSDictionary *)change
                   context:(void *)context
{
    if ([anObject isKindOfClass:[smartApp class]])
    {
        if ([keyPath isEqual:@"status"])
        {
            NSLog(@"Clicked on row: %lu", (unsigned long)[self.appsArray indexOfObject:anObject]);
        }
    }
}

一旦你在方法中,你可以做你想做的事。它肯定会被调用,并且您会得到与您单击的行匹配的对象、更改字典和键路径。

希望有帮助

于 2013-09-24T07:46:04.420 回答
1

您不应该将NSButton(复选框)绑定到Shared User Defaults Controller而不是它所描绘的,Table Cell View吗?

于 2013-04-11T00:28:06.033 回答
0

是的,基于视图的表格视图是不同的。(我自己只是在学习这个。)在基于视图的表格视图中,表格单元视图的 objectValue 是该行表示的对象。您将文本字段、复选框等绑定到该 objectValue 的键路径。

于 2013-04-11T04:24:02.660 回答