关于swift:NSOutlineView EXC_BAD_ACCESS在展开时崩溃

NSOutlineView EXC_BAD_ACCESS crash on expand

我正在尝试使用Swift在我的项目中使用NSOutlineView
我已经使用Objective-C进行了几次此操作,没有任何问题,但是由于某些原因,我的应用程序一直崩溃,并使用EXC_BAD_ACCESS崩溃,主要是在尝试扩展单元格时。

我创建了一个仅具有大纲视图和4种数据源方法的新测试项目,但是崩溃也在那里发生。

这是最小的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func outlineView(outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int {

    return 3
}

func outlineView(outlineView: NSOutlineView, child index: Int, ofItem item: AnyObject?) -> AnyObject {

    return"Test"
}

func outlineView(outlineView: NSOutlineView, isItemExpandable item: AnyObject) -> Bool {

    return true
}

func outlineView(outlineView: NSOutlineView, objectValueForTableColumn tableColumn: NSTableColumn?, byItem item: AnyObject?) -> AnyObject? {

    return nil
}

我在做什么错的任何想法?

我已经在这里上传了测试项目。请检查一下。 https://drive.google.com/file/d/0BzEhecUbyNeFS3JGN1V0SlJ0dWM/view


为了使您的示例按预期工作,我必须修复一些问题:

  • 发生了与" Test "作为本地字符串有关的崩溃,并在大纲视图尝试保留它之前释放了该崩溃。这是通过使视图控制器拥有项目来解决的。

  • 在那之后,由于无限递归,我遇到了崩溃。通过使用数据模型而不是告诉大纲视图,无论项目处于什么级别,每个项目都有3个子项,从而解决了该问题。

  • 我还更改了项目,使其成为NSObject而不是String的子类,因为我记得阅读过这是必要的。 (我目前找不到参考。)