Objective c 如何单击NSTableView中的复选框并使用KVC更新对象?还是个问题
几天前,我发布了在nstableview()中使用复选框的问题。彼得·霍西帮助了我,但我仍然无法让它发挥作用。我似乎在实现一个应该简单明了的按钮时犯了很大的错误。我有一个具有三个字段的桌面视图;bool、text和text。每列的值都绑定到我的arraycontroller。这在开始时工作正常,表格很好地填充,所有复选框都设置为on。当我尝试单击任何复选框并将其设置为关闭时,应用程序崩溃。复选框的值是对象的布尔属性,单击复选框应更改属性值并将其存储。我想我可以使用KVC实现这一点,其中对象存储在nsmutablearray中(我不使用核心数据),并定义:Objective c 如何单击NSTableView中的复选框并使用KVC更新对象?还是个问题,objective-c,cocoa,Objective C,Cocoa,几天前,我发布了在nstableview()中使用复选框的问题。彼得·霍西帮助了我,但我仍然无法让它发挥作用。我似乎在实现一个应该简单明了的按钮时犯了很大的错误。我有一个具有三个字段的桌面视图;bool、text和text。每列的值都绑定到我的arraycontroller。这在开始时工作正常,表格很好地填充,所有复选框都设置为on。当我尝试单击任何复选框并将其设置为关闭时,应用程序崩溃。复选框的值是对象的布尔属性,单击复选框应更改属性值并将其存储。我想我可以使用KVC实现这一点,其中对象存储在
@property(readwrite) BOOL doSync; //(interface)
@dynamic doSync; // implementation
我确信我做了一些根本错误的事情,但即使在阅读了所有我能从网上或书中找到的文献之后,我也无法找到这个错误。单击复选框后,如何设置doSync属性的值?
我使用调试器运行程序,崩溃报告的顶部如下所示:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000060
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 com.apple.CoreData 0x00007fff8607b73b _propertyAtIndexForEntityDescription + 11
1 com.apple.CoreData 0x00007fff860b83c2 -[NSManagedObject validateValue:forKey:error:] + 98
2 com.apple.Foundation 0x00007fff880ea3cf -[NSObject(NSKeyValueCoding) validateValue:forKeyPath:error:] + 254
3 com.apple.AppKit 0x00007fff83d4ec01 -[NSBinder _setValue:forKeyPath:ofObject:mode:validateImmediately:raisesForNotApplicableKeys:error:] + 196
4 com.apple.AppKit 0x00007fff83df7855 -[NSBinder setValue:forBinding:atIndex:error:] + 492
5 com.apple.AppKit 0x00007fff83d66b33 -[_NSValueBinderPlugin applyObjectValue:forBinding:operation:needToRunAlert:error:] + 423
6 com.apple.AppKit 0x00007fff84140ec5 -[NSValueBinder _applyObjectValue:forBinding:canRecoverFromErrors:handleErrors:typeOfAlert:discardEditingCallback:otherCallback:callbackContextInfo:didRunAlert:] + 116
7 com.apple.AppKit 0x00007fff84140d2c -[NSValueBinder applyDisplayedValueHandleErrors:typeOfAlert:canRecoverFromErrors:discardEditingCallback:otherCallback:callbackContextInfo:didRunAlert:] + 567
8 com.apple.AppKit 0x00007fff83d66556 -[NSValueBinder performAction:] + 300
9 com.apple.AppKit 0x00007fff83d663e3 -[_NSBindingAdaptor _objectDidTriggerAction:bindingAdaptor:] + 136
10 com.apple.AppKit 0x00007fff83d6632d -[_NSBindingAdaptor objectDidTriggerAction:] + 218
11 com.apple.AppKit 0x00007fff83cda092 -[NSControl sendAction:to:] + 63
我将非常感谢任何链接到我可能看到的示例,以及关于如何解决此问题的评论。我感谢你们的耐心,希望你们中的一些人能帮助我 结果是我没有正确访问我的对象,因此导致我的setter崩溃。此外,我认为我对使用数据源和使用KVC的绑定之间的区别一无所知,并将它们混为一谈。所以我重新开始,删除了复选框,创建了一个名为checkbox的新列。然后,我创建了NSCell的一个子类,它根据我使用KVC接收的对象值控制和绘制每一行。现在二传手也工作得很好。谢谢你的帮助