Swift 프로젝트에서 NSOutlineView를 사용하여 소스 목록을 배포하려고합니다.Swift에서 isGroupItem 대리자 메서드를 사용할 때의 NSOutlineView 크래시
아래보기 컨트롤러는 isGroupItem 대리자 메서드가 호출되지 않으면 잘 작동합니다. 그러나 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
}
}
이 샘플 프로젝트는이 질문은 애플 개발자 포럼에서 켄 Thomases 응답 된 here
냄새는 버그를 좋아합니다. 'true'를 반환하면 충돌이 발생합니다. 'false'를 반환하면 부모 행이'malloc ... '으로 표시됩니다. –
이것은 틀림없이 버그입니다. 그것은 단지 "일해야"하지만하지 않습니다. 내 답변을 참조하십시오 (곧 제공 될 예정). –