gpt4 book ai didi

cocoa - 当 isGroupItem 委托(delegate)方法与 Swift 一起使用时,NSOutlineView 崩溃

转载 作者:搜寻专家 更新时间:2023-10-30 21:51:30 24 4
gpt4 key购买 nike

我想在 Swift 项目中使用 NSOutlineView 部署源列表。

当未调用 isGroupItem 委托(delegate)方法时,下面的 View Controller 工作良好。但是,使用 isGroupItem 方法时会返回许多 __NSMallocBlock__ 项目。我不知道这些元素来自哪里。我提供的项目只是字符串。

class ViewController: NSViewController, NSOutlineViewDataSource, NSOutlineViewDelegate {

let topLevel = ["1", "2"]
let secLevel = ["1": ["1.1", "1.2"], "2": ["2.1", "2.2"]]

func outlineView(outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int {
if let str = item as? String {
let arr = secLevel[str]! as [String]
return arr.count
} else {
return topLevel.count
}
}

func outlineView(outlineView: NSOutlineView, isItemExpandable item: AnyObject) -> Bool {
return outlineView.parentForItem(item) == nil
}

func outlineView(outlineView: NSOutlineView, child index: Int, ofItem item: AnyObject?) -> AnyObject {
var output: String!
if let str = item as? String {
output = secLevel[str]![index]
} else {
output = topLevel[index]
}
return NSString(string: output)
}

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

func outlineView(outlineView: NSOutlineView, isGroupItem item: AnyObject) -> Bool {
return (outlineView.parentForItem(item) == nil)
}

func outlineView(outlineView: NSOutlineView, viewForTableColumn tableColumn: NSTableColumn?, item: AnyObject) -> NSView? {
return outlineView.makeViewWithIdentifier("HeaderCell", owner: self) as NSTextField
}
}

示例工程可以下载here

最佳答案

如果你查看 NSOutlineView 文档,你会发现它只存储指针;它不保留从 child:ofItem: 委托(delegate)方法返回的对象。因此,当您执行此行时:

return NSString(string: output)

你正在返回一个新的 NSString 实例,它很快被释放(因为大纲 View 不保留它)。在那之后,任何时候你询问有关项目的问题都会崩溃,因为 NSString 已被释放。

解决方案很简单:将 NSString 存储在一个数组中,每次都返回相同的实例。

科尔宾

关于cocoa - 当 isGroupItem 委托(delegate)方法与 Swift 一起使用时,NSOutlineView 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27424191/

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