mar*_*ark 3 xcode cocoa cocoa-bindings
是否可以将 Control 绑定到存储在用户默认值中的数组的集合属性?
我试图(在 Xcode 4.3 的界面构建器中)将 Max Value 绑定到数组计数,如下所示:
最大值(共享用户默认值 Controller.values.MYArrayName.@count)
绑定到:共享用户默认值控制器
控制器键:值
模型键路径: MYArrayName.@count
不幸的是,这根本没有影响(甚至没有任何错误)。
我可以将 Max Value 绑定到视图控制器中的 ivar,然后将其绑定到用户默认值中的值。例如
NSUInteger maxVal
...
NSUserDefaults* stdUD=[NSUserDefaults standardUserDefaults];
[self bind:@"maxVal" toObject:stdUD withKeyPath:@"MYArrayName.@count" options:nil];
Run Code Online (Sandbox Code Playgroud)
然后:
最大值(文件的所有者.maxVal)
绑定到:文件所有者
控制器密钥:
模型密钥路径: maxVal
但我希望不用额外的步骤就可以做到
您可以在 Interface Builder 中使用标准用户默认值,有 2 个选项:
在 Interface Builder 中,将 User Defaults Controller 拖入 Objects。
然后,拖入一个 NSArrayController,并将其命名为“ArrayFromDefaultsController”(只是为了清楚起见)。确保它的模式是类,类名是 NSArray(或 NSMutableArray)。
在绑定选项卡中,在内容数组下:
绑定:用户默认控制器
控制器键:值
模型密钥路径:<#您的密钥#>
转到您的字段,并绑定它的最大值:
绑定:ArrayFromDefaultsController
控制器键:排列对象
模型键路径:@count
这只是创建了一个数组控制器,该控制器绑定了用户默认值中的数组,并且该字段绑定到该数组控制器的排列对象的计数值。
创建一个 NSValueTransformer 子类(例如 ArrayCountValueTransformer),并在类中放置:
+(Class)transformedValueClass {
return [NSNumber class];
}
- (id)transformedValue:(id)value {
if (value == nil) {
return nil;
} else {
return [NSNumber numberWithInteger:[value count]];
}
}
Run Code Online (Sandbox Code Playgroud)
这将自动将用户默认数组的计数转换为模型键路径中可识别的值。
将用户默认控制器拖入对象列表。然后,在您要绑定的字段中(在最大值上):
绑定:用户默认控制器
控制器键:值
模型密钥路径:<#your key#>(无@count)
值转换器:ArrayCountValueTransformer
归档时间: |
|
查看次数: |
2011 次 |
最近记录: |