objective-c - 如何单击 nstableview 中的复选框并使用 KVC 更新对象?

标签 objective-c cocoa

我正在尝试学习 cocoa,但在 KVC 和绑定(bind)方面遇到了一些问题。我有一个包含三列的 nstableview; “复选框”、“文本”、“图标”。每列的值都使用 KVC 绑定(bind)到数组 Controller 。当程序启动时,行和列将根据数组中的值正确填充到表格 View 中。我可以单击一行并使用如下内容正确打印该行的内容:

 - (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 和绑定(bind)在 tableview 中使用复选框的示例。我很感激我能在这方面获得的任何帮助,并且我会很感激任何我可以看一下的例子。 干杯和感谢!特隆德

最佳答案

您不需要自己将其作为操作来实现。只需通过数组 Controller 的 arrangedObjects 将列绑定(bind)到模型对象的 doSync 属性即可。

如果您不想使用绑定(bind),您仍然不应该将其实现为操作。相反,作为 TableView 的数据源并响应 TableView 将发送给您以更改其中一个值的消息。

@dynamic doSync;

如果您转身并在同一个类中实现该属性的访问器,则没有理由这样做。

如果这是一个托管对象类并且该属性是实体的属性,则 your accessors should send [self willAccessValueforKey:] before and [self didAccessValueForKey:] after accessing the instance variable 。如果这就是他们所做的全部,那么您根本不应该实现自定义访问器;将它们剪掉并单独使用 @dynamic

- (void)setDoSync:(BOOL) value{
    doSync = NO;

这并不是将属性设置为传入的值。

关于objective-c - 如何单击 nstableview 中的复选框并使用 KVC 更新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3742441/

相关文章:

iphone - 计算日历周

iphone - 对 NSCFTimer 感到困惑...它是什么?

objective-c - Objective-C : NSRange or similar with float?

objective-c - 如何将数据保存到用户的应用程序支持中?

objective-c - NSNetService 委托(delegate)未被调用

ios - 设置值 :ForKey: instead of set(whatever)?

iphone - NSString 与\0

ios - 为 CALayer 的 shadowPath 设置动画时的平滑动画

objective-c - OpenGL透明纹理(混合)

cocoa - 在 Cocoa 中将 unicode 转义为 unicode 字符