Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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/4/matlab/15.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
Xcode 绑定到用户默认值中数组的@count_Xcode_Cocoa_Cocoa Bindings - Fatal编程技术网

Xcode 绑定到用户默认值中数组的@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 然后: 最大值(文件的

是否可以将控件绑定到存储在用户默认值中的数组的集合属性

我试图(在Xcode 4.3的interface builder中)将最大值绑定到数组计数,如下所示:

最大值(共享用户默认值Controller.values.MYArrayName@count)
绑定到:共享用户默认控制器
控制器键:
模型密钥路径: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]];
    } 
}