gpt4 book ai didi

macos - NSOutlineViewDataSource 和 swift

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:20 25 4
gpt4 key购买 nike

我正在尝试使用 Swift 实现 NSOutlineViewDataSource,当使用 Swift 字符串时,应用程序会崩溃。当我将数组 people 更改为 NSString 时,它工作正常。

根据 Working with Cocoa Data Types当您导入 Foundation 时,字符串桥接应该是自动的。

数据源代码如下:

import Cocoa
import Foundation

class ViewController: NSViewController, NSOutlineViewDataSource {

let people: [String] = ["Mary", "John", "Paul"] // when using NSString it works fine

func outlineView(outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int {
return item == nil ? people.count : 0
}

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

func outlineView(outlineView: NSOutlineView, child index: Int, ofItem item: AnyObject?) -> AnyObject {
return people[index]
}

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

知道为什么会这样吗?

Xcode 版本 6.1 (6A1052d)

Xcode 项目托管在这里:https://github.com/tanob/ExampleNSOutlineView

最佳答案

我总是有点不愿意将我不理解的行为标记为错误,但这对我来说就像一个错误。

如果您在填充表时记录传递给 outlineView:objectValueForTableColumn:byItem 的值,则在第三次调用之后 item 的值是意外的(使用NSString 该值始终是您的项目之一):

func outlineView(outlineView: NSOutlineView, 
objectValueForTableColumn tableColumn: NSTableColumn?,
byItem item: AnyObject?) -> AnyObject? {
callCount++
if callCount > people.count {
println(item)
return "junk"
} else {
return item
}
}

// output ->
// call count: 1; <item> value: Optional(Mary)
// call count: 2; <item> value: Optional(John)
// call count: 3; <item> value: Optional(Paul)
// call count: 4; <item> value: Optional(<__NSBlockVariable__: 0x60000004cb40>)
// call count: 5; <item> value: Optional(<RIPData 0x608000043300>) // surely not good!
// call count: 5; <item> value: Optional(<RIPData 0x608000043390>)
// ...

大多数情况下,此实现也会崩溃,但偶尔会加载大纲 View - 当然三个单元格中的每一个都具有值 junk

同样有趣的是,在基于单元格的 NSTableView 中使用 String 值似乎没有任何问题 - 我将您的数据放入一个没有问题。

所以我对你的问题的简短回答为什么会这样? 将是一个试探性的因为你发现了一个错误 - 但是基于单元格的 NSOutlineView 错误,而不是 String 错误。

关于macos - NSOutlineViewDataSource 和 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284723/

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