Xcode 绑定到用户默认值中数组的@count
是否可以将控件绑定到存储在用户默认值中的数组的集合属性 我试图(在Xcode 4.3的interface builder中)将最大值绑定到数组计数,如下所示: 最大值(共享用户默认值Controller.values.MYArrayName@count)Xcode 绑定到用户默认值中数组的@count,xcode,cocoa,cocoa-bindings,Xcode,Cocoa,Cocoa Bindings,是否可以将控件绑定到存储在用户默认值中的数组的集合属性 我试图(在Xcode 4.3的interface builder中)将最大值绑定到数组计数,如下所示: 最大值(共享用户默认值Controller.values.MYArrayName@count) 绑定到:共享用户默认控制器 控制器键:值 模型密钥路径:MYArrayName.@count 不幸的是,这根本没有效果(甚至没有任何错误) 我可以将最大值绑定到视图控制器中的ivar,然后将其绑定到用户默认值。 e、 g 然后: 最大值(文件的
绑定到:共享用户默认控制器
控制器键:值
模型密钥路径:MYArrayName.@count 不幸的是,这根本没有效果(甚至没有任何错误) 我可以将最大值绑定到视图控制器中的ivar,然后将其绑定到用户默认值。 e、 g 然后: 最大值(文件的所有者.maxVal)
绑定到:文件所有者
控制器键:
模型密钥路径:maxVal
但是我希望不需要额外的步骤就可以做到这一点您可以将standardUserDefaults与Interface Builder一起使用,有两个选项: 第一选择 在Interface Builder中,将用户默认控制器拖动到对象中 然后,拖入一个NSArrayController,并将其命名为“ArrayFromDefaultsController”(为了清晰起见)。确保其模式为Class,类名为NSArray(或NSMutableArray) 在“绑定”选项卡的“内容数组”下: 绑定:用户默认控制器 控制器键:值 模型密钥路径: 转到您的字段,并绑定其最大值: 绑定:来自DefaultsController的数组 控制器键:排列对象 模型密钥路径:@count 这只需创建一个数组控制器,该控制器绑定到用户默认设置中的数组,该字段绑定到该数组控制器的arrangedObjects的计数值 第二种选择 创建NSValueTransformer子类(例如ArrayCountValueTransformer),并在类中放置以下内容:
+(Class)transformedValueClass {
return [NSNumber class];
}
- (id)transformedValue:(id)value {
if (value == nil) {
return nil;
} else {
return [NSNumber numberWithInteger:[value count]];
}
}
这将自动将用户默认数组的计数转换为模型密钥路径中可识别的值
将用户默认控制器拖动到“对象”列表中。然后,在要绑定的字段中(按最大值):
绑定:用户默认控制器
控制器键:值
模型密钥路径:(无@count)
值转换器:ArrayCountValueTransformer在编程版本中,您遗漏了键路径中的“值”。也许这是部分原因吧?我以前试过移除它,但这是必要的。但您的评论使我意识到,在XIB中,我绑定到共享用户默认控制器,但在代码中它绑定到标准用户默认对象。值文档中说“返回一个符合键值编码的对象,用于访问用户默认属性”,以及“使用键值观察可观察此属性”,所以我认为它会起作用。很明显,我也遗漏了一些其他的东西。我只是想知道为什么你的编程示例能够工作,即使你忽略了“值”,我真的不记得问过这个问题或者我后来做了什么,但这些似乎都是很好的答案,所以我会将其标记为已接受的答案。
+(Class)transformedValueClass {
return [NSNumber class];
}
- (id)transformedValue:(id)value {
if (value == nil) {
return nil;
} else {
return [NSNumber numberWithInteger:[value count]];
}
}