1

Apple は、Yosemite の NSPathControlItem で動作するように NSPathControl を変更しました。

しかし、私が座っているところから見ると、これらの新しいクラスはまったく機能しません。データ構造にカスタム パスを表示しようとしていますが、通常のファイル パスにも同様の問題があります。それは私ですか、それともアップルですか?

これが私のコードです:

最初のスニペットは次のように機能し、パスが表示されます。しかし、それが機能するすべてです。

//MARK: notifications
func selectionDidChange(notification : NSNotification)
{
    if let item = notification.object as? Group
    {
        //get "path" components
        var components : [String] = [item.title ?? "a"]
        var ancestor : Group? = item.parent
        while (ancestor != nil)
        {
            components.append(ancestor?.title ?? "b")
            ancestor = ancestor?.parent
        }
        components.append("")

       //convert to url
        let path = ("MyScheme:/" + "/".join(components.reverse()))
        pathControl?.URL = NSURL(string: path.stringByAddingPe
     }
 }

パスの任意の部分をクリックして NSPathControlItem からプロパティを取得しようとしても、まったく機能しません。すべてが nil を返します。

@IBAction func select(sender : AnyObject)
{
    println(sender.clickedPathItem??.title)
    println(sender.clickedPathItem??.URL)
}

NSPathControlItem でパスを作成しようとすると、プロパティ (タイトル、URL) を設定できません。

    pathComponent.URL = NSURL(string: path.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
    //let url : NSURL? = NSURL(string: "/")
    //let path = NSURL(fileURLWithPath: "/") 
    //pathComponent.URL = path as NSURL
    pathComponent.attributedTitle = NSAttributedString(string: "/atttributes")
    self.pathControl?.pathItems = [pathComponent]
    println(pathComponent.description)

また、NSPathControlItem はサブクラス化されるべきではありません。

ここで何が起こっているのですか?

編集

私が知る限り、NSPathControlItem には問題があります。NSPathControlItem を作成するヘルパー関数。

    func pathItem(title: String, imageName: String) -> NSPathControlItem
{
    let item = NSPathControlItem()
    item.title = title
    item.image = NSImage(named: imageName)
    return item
}

NSPathControlItem を作成し、そのタイトルを出力するテスト関数。

    var pathItems : [NSPathControlItem] = []
    for title in ["a","b","c"]
    {
        pathItems.append(self.pathItem(title, imageName: NSImageNameFolder))
    }

    for item in pathItems
    {
        println(item.title)
    }

予想される出力は、a、b、c の 3 行です。私はnil、b、nilを取得します。

NSPathControl に直接 pathItems を設定すると、機能します。

self.pathControl?.pathItems = [
self.pathItem("a", imageName: NSImageNameFolder),
self.pathItem("b", imageName: NSImageNameFolder),
self.pathItem("c", imageName: NSImageNameFolder)]

ただし、pathItems を間接的に設定すると、すべてが地獄になります。

self.pathControl?.pathItems = pathItems //array of NSPathControl (see above)

編集 2

私はこれをもう一度見ました。pathItem 関数で NSPathControlItem を構成します。ここでタイトルを設定します。attributedTitle を設定しても違いはありません。lldb でアイテムを検査すると、正しい (属性付きの) タイトル値が表示されます。

しかし、NSPathControlItem の配列を NSPathControl に割り当てると、タイトルの値は "" になり、attributedTitle は初期化されません。

4

2 に答える 2