Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何在NSUserDefaults中绑定NSDictionary中的对象?_Cocoa_Interface Builder_Nsdictionary_Nsuserdefaults_Cocoa Bindings - Fatal编程技术网

Cocoa 如何在NSUserDefaults中绑定NSDictionary中的对象?

Cocoa 如何在NSUserDefaults中绑定NSDictionary中的对象?,cocoa,interface-builder,nsdictionary,nsuserdefaults,cocoa-bindings,Cocoa,Interface Builder,Nsdictionary,Nsuserdefaults,Cocoa Bindings,如何将NSDictionary对象绑定到Interface Builder中的几个文本字段 我想将每个对象绑定到字典中的特定项。例如,第一个文本字段应绑定到Actor: 尝试将NSDictionaryController添加到.xib文件中,然后以用户默认值将其控制器内容绑定到词典中。然后可以将文本字段值绑定到字典控制器(arrangedObjects键) 我从来没有试过,但我认为它一定有用 希望有帮助。您需要在Interface Builder中添加一个NSObjectController。在

如何将NSDictionary对象绑定到Interface Builder中的几个文本字段

我想将每个对象绑定到字典中的特定项。例如,第一个文本字段应绑定到Actor:


尝试将
NSDictionaryController
添加到.xib文件中,然后以用户默认值将其控制器内容绑定到词典中。然后可以将文本字段值绑定到字典控制器(arrangedObjects键)

我从来没有试过,但我认为它一定有用


希望有帮助。

您需要在Interface Builder中添加一个NSObjectController。在attributes inspector选项卡中,将标准模式“Class”和类名保留在“NSMutableDictionary”上,但打开开关“Prepares Content”。在绑定检查器中,将“内容对象”绑定到“共享用户默认值控制器”,将控制器键“值”和“模型键路径”绑定到字典的用户默认值中的键。打开开关“将内容处理为复合值”

现在可以绑定文本字段(或复选框等)。使用控制器键“selection”(!)和字典中的键(作为模型键路径)将值传递给ObjectController


希望这有帮助。我在苹果的文档中找不到答案,在网上也找不到,我很幸运地通过尝试不同的控制器对象找到了答案…

首先:@keelou的答案应该被标记为正确

以编程方式进行 如果您是在代码中而不是通过IB执行此操作,则需要注意“gotcha”。看起来是这样的:

// Assume 'anObjectController' is an NSObjectController. // Assume 'userDefaultsController' is [NSUserDefaultsController sharedUserDefaultsController] // Assume 'someDictionary' is an NSDictionary in userDefaults. [self.anObjectController bind:NSContentBinding toObject:userDefaultsController withKeyPath:@"values.someDictionary" options:@{NSHandlesContentAsCompoundValueBindingOption: @YES}]; //假设“anObjectController”是NSObjectController。 //假设“userDefaultsController”是[NSUserDefaultsController sharedUserDefaultsController] //假设“someDictionary”是UserDefault中的NSDictionary。 [self.anObjectController] 绑定:NSContentBinding toObject:userDefaultsController withKeyPath:@“values.someDictionary” 选项:@{nShandleContentAsCompoundValueBindingOption:@YES}]; 如果您执行上述操作,您会发现,当您将UI元素绑定到
someDictionary
中的属性时,这些UI元素将正确显示用户默认值,但当您更改它们时(例如,单击绑定复选框),这些值将不会以用户默认值更新;旧的价值观依然存在

原因 绑定必须是到
NSContentObjectBinding
而不是
NSContentBinding
。NSObjectController类公开名为
contentObject
的绑定。当你这么做的时候,一切都正常


这是一个很容易犯的错误,因为Xcode的代码完成会自动用于
NSContentBinding
,而且它是最常用的绑定名称之一。这给我带来了好几个小时的麻烦,所以希望我能为其他人节省一些时间。

是的,这正是我现在正在尝试的。但是,我需要将NSDictionary的特定项绑定到不同的文本字段。因此,我想知道是否应该按照您的建议,在ControllerKey=“Arranged Objects”旁边使用模型键路径。谢谢,到目前为止,我已经试过了,但不起作用。但我猜模型密钥路径不是存储在NSDictionary中的项的名称。只是让它旋转一下。它的工作原理是将用户默认值正确加载到UI中。但是,当这些值发生更改时,这些更改不会像我预期的那样传播回用户默认值。知道为什么吗?我知道了。下面添加了一个详细的答案。你知道如何绑定到嵌套字典吗?例如,这不起作用:[myButton bind:@“value”toObject:self.anObjectController withKeyPath:@“selection.key1.key2”选项:[NSDictionary Dictionary WithObject:[NSNumber numberWithBool:YES]forKey:@“NSContinuouslyUpdatesValue”];当我使用@“selection.key1”作为键路径时,它可以正常工作。但是我需要深入到字典中,你需要一套嵌套的ObjectController。每个级别一个。8年后这很荒谬,但请检查答案,被接受的答案是错误的,但来自@keeluu的答案是正确的。干杯:9