gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:44:23 25 4
gpt4 key购买 nike

我正在尝试学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com