- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 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/
关于outlineView:objectValueForTableColumn:byItem:数据源方法,文档中有注释说: While this method is marked as @option
我是 Cocoa 编程的新手(但对其他 UI 框架相对有经验),并且无法准确说出我在哪里出错了出现以下情况。 我有一个由 NSOutlineViewDataSource 包装的数据“树”。这些项目是非
我正在尝试使用 Swift 实现 NSOutlineViewDataSource,当使用 Swift 字符串时,应用程序会崩溃。当我将数组 people 更改为 NSString 时,它工作正常。 根
我提供一个NSOutlineViewDataSource。表的数据是从数据库中取出的。正在进行少量处理,但不多。 我正在计算 outlineView: objectValueForTableColum
我正在尝试为 NSOutlineView 实现数据源。问题是我不知道从 outlineView:child:ofItem: 返回什么类型的对象。 当前代码如下所示: [Export("outlineV
我正在实现一个简单的文件浏览器(在 NSOutlineView 中)并且在展开我的根节点时遇到了 EXC_BAD_ACCESS。我的 NSOutlineViewDataSource 返回子项如下: -
与 NSTableViewDataSource 不同,NSOutlineViewDataSource 协议(protocol)没有 outlineView:draggingSession:endAtP
我是一名优秀的程序员,十分优秀!