我正在尝试学习可可,但在 KVC 和绑定方面遇到了一些问题。我有一个包含三列的 nstableview; “复选框”、“文本”、“图标”。每列的值都使用 KVC 绑定到数组控制器。当程序启动时,行和列将根据数组中的值正确填充到表格视图中。我可以单击一行并使用如下内容正确打印该行的内容:
- (IBAction)fileTableViewSelected:(id)sender{
NSInteger r;
NSDate *fModOne;
id object;
r = [[NSNumber numberWithInt:[sender selectedRow]] intValue];
object = [arrayIntersect objectAtIndex:r];
fModOne = [object valueForKey:@"fileModifiedDirOne"];
NSLog(@"Date found in row is %@",fModOne);
}
我的问题是当我尝试单击第一列中的复选框并更改该框的值时。最初,使用 arraycontroller 将复选框的值设置为 1,效果很好,但是当我想通过单击特定行的复选框将其值更改为 0 时,程序崩溃了。单击该框时,会正确调用一个操作,我认为我可以通过调用以下命令来简单地更改对象 BOOL 的值:
[object setValue:[NSNumber numberWithBool:NO] forKey:@"doSync"];
我的 BOOL doSync 的 setter 和 getter 定义为:
@property(nonatomic, readwrite) BOOL doSync;
@dynamic doSync;
- (void)setDoSync:(BOOL) value{
NSLog(@"setting dosync %i", value);
doSync = NO;
}
- (BOOL)doSync{
return doSync;
}
我到处搜索问题的解决方案,但找不到任何有关如何使用 KVC 和绑定在 tableview 中使用复选框的示例。我很感激我能在这方面获得的任何帮助,并且我会很感激任何我可以看一下的例子。
干杯和感谢!特隆德
您不需要自己将其作为操作来实现。只需通过阵列控制器绑定列即可arrangedObjects
to the doSync
模型对象的属性。
如果您不想使用绑定,您仍然不应该将其实现为操作。相反,作为表视图的数据源并响应表视图将发送给您的消息以更改其中一个值。
@dynamic doSync;
如果您转身并在同一个类中实现该属性的访问器,则没有理由这样做。
如果这是一个托管对象类并且该属性是实体的属性,则你的访问者应该发送[self willAccessValueforKey:]之前和[self didAccessValueForKey:]访问实例变量后 http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html%23//apple_ref/doc/uid/TP40002154-SW14。如果那是all如果确实如此,那么您根本不应该实现自定义访问器;把它们剪下来并有@dynamic
alone.
- (void)setDoSync:(BOOL) value{
doSync = NO;
这并不是将属性设置为传入的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)