我在NSTokenFieldCell上遇到了问题,所以我开始用Xcode创建一个新项目来隔离这个问题。以下是我所做的:
起初,它似乎很好,但是如果您双击一个单元格进行编辑,然后选项卡和shift+tab来回切换单元格,则当令牌字段单元格接收到焦点时,应用程序最终会崩溃。
我在Lion10.7.2中使用了Xcode 4.2,附带了模板的所有默认设置。
发布于 2011-10-31 05:05:01
好像是可可里的虫子。如果你打开僵尸,你会看到这个:
2011-10-31 00:02:43.802 tokenfieldtest[35622:307] *** -[NSTokenFieldCell respondsToSelector:]: message sent to deallocated instance 0x1da761f10我尝试为表设置一个委托并实现- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row,每次都返回一个新的NSTokenFieldCell (仅针对令牌列),但我得到了相同的错误。
发布于 2021-05-26 03:16:42
原来的解决方案带来了一个新的问题。
当NSTokenFieldCell未在NSTableView中完全显示时,进入编辑状态然后退出将导致表视图异常显示。
因此,我多次试图找到一个更好的解决方案:
class MyTokenFieldCell: NSTokenFieldCell {
override func fieldEditor(for controlView: NSView) -> NSTextView? {
return nil;
}
}可能是NSTableView的NSTokenFieldCell编辑器重用机制存在问题,导致程序崩溃。
fieldEditorForView:在这里被覆盖,返回零,这将导致每次编辑时重新创建编辑器,避免重用,从而解决崩溃问题。
以下是最初的答案。
因为该解决方案会导致其他问题,请忽略它.
我也遇到了这个问题。我的解决方案是暂时保留表视图使用的单元格。
NSTableViewDelegate的NSTableViewDelegate方法,为表视图提供MyTokenFieldCell,并将标识符设置为:<columnIdentifier>:<row>
扩展ViewController: NSTableViewDelegate { func tableView(_ tableView: NSTableView,dataCellFor tableColumn: NSTableColumn?,row: Int) -> NSCell?NSCell } let cell = MyTokenFieldCell() cell.isEditable = cell.identifier =.init(“(columnIdentifier.rawValue):(行)”)返回单元格}}https://stackoverflow.com/questions/7911165
复制相似问题