NSUserDefaults中的NSTableView复合列

时间:2014-01-14 14:03:39

标签: objective-c macos nsmutablearray nsuserdefaults nstableview

我有一个表,其中包含项目名称列和复选框单元格列。 我研究过并发现只有iOS特定的答案(OS X不能采用这些答案)。

我使用数组控制器在NSMutableDictionary中显示项目名称和复选框单元格(当然在控制器的NSArray内部)。

  • 问题:问题是,我只能绑定一次复选框单元格的值,这首先是数组控制器。它正确显示项目名称,并以这种方式显示复选框单元格,但它不会在重新启动时保存复选框单元格的值(毫不奇怪)。

现在由于每列的值绑定在一起,我无法将它们分开。 我研究并发现“共享用户默认控制器”或NSUserDefaults可以用于NSTableView的两个列,但是如何以编程方式填充表?

在连接dataSource并将NSTableView内容“MixedValues”绑定到“共享用户默认控制器”后,我得到了它:

- (void) myItemListFunction
{
    for (NSUInteger i = 0; i < myItemList.count; i++)
    {
        [rows addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[myItemList objectAtIndex:i], @"MyItemList", [[NSUserDefaults standardUserDefaults] boolForKey:@"CheckboxCell"], @"CheckboxCell", nil]];

        [[NSUserDefaults standardUserDefaults] setValue:rows forKey:@"MixedValues"];
    }

    [myTableView reloadData];
}
  • 输出:显示复选框单元格,但无法检查,项目名称未显示,但行数正确

EDIT1:我通过NSLog发现,问题似乎是复选框单元格代码,因为没有显示复选框bool:

[[NSUserDefaults standardUserDefaults] boolForKey:@"CheckboxCell"], @"CheckboxCell"

我不知何故需要将for-loop变量i放入我的boolForKey中,但是如何......

Edit2:使用它在NSLog中至少提供一个bool:

[rows addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[myItemList objectAtIndex:i], @"MyItemList", [NSNumber numberWithBool:YES], @"CheckBoxCell", nil]];

编辑3:现在我已经知道了保存复选框单元格的状态,但是在使用arrayForKey时它会使用整个对象数组。我现在需要的是以某种方式使用objectAtIndex:i为模型密钥路径“CheckboxCell”中的每个项目。它仍然没有显示MyItemList的项目...

Edit4:现在看来这段代码只生成一次复选框,但它符合我想要实现的目标:

NSArray *arrayList = [[NSUserDefaults standardUserDefaults] arrayForKey:@"Check"];
arrayList = @[@"0"];

[rows2 addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[directoryList objectAtIndex:i], @"Logs", arrayList, @"Check", nil]];

需要做的是在最后一行获取@“Check”以包含objectAtIndex:i ...

0 个答案:

没有答案