cocoa – 在多个Storyboard场景中使用NSArrayController

我有一个使用故事板的基于Mac文档的核心数据应用程序.故事板具有以下布局:

Window Controller
    Split View Controller
        Table View Controller
        Text View Controller

My Core Data模型包含一个Chapter实体,它包含两个属性:title和contents.我希望表视图显示每个章节标题.文本视图显示所选章节的内容.

如果我使用的是xib文件,我会在xib文件添加一个数组控制器.我将数组控制器绑定到File的所有者以访问我的NSPersistentDocument子类.我将表视图绑定到数组控制器的arrangeObjects属性,并将文本视图绑定到数组控制器的选择.

但随着故事板,事情变得更加复杂.我可以向表视图控制器添加一个数组控制器,将表视图绑定到数组控制器,并在表视图中显示章节标题.但是文本视图控制器无法绑定到该阵列控制器,因为阵列控制器位于另一个场景中.

如何在Interface Builder中添加数组控制器,以便表视图控制器和文本视图控制器都可以访问它并绑定到它?

解决方法

使这项工作的关键是在每个降序的NSViewController子类中都有一个NSArrayController实例,并通过中央数据源(很可能是您的NSDocument子类)将它们绑定在一起.然后,您可以将此数据源设置为NSViewController子类RepresentObject,方法是将其向下传递
控制器.以下是带有NSWindowController的storyboard应用程序的示例,该应用程序具有内容视图控制器,该控制器是具有两个子视图控制器的NssplitViewController(A Master / Detail设置):

class Document: NSDocument {

    var dataSource: DataSource? = DataSource()

    ...
}

class DataSource: NSObject,NSCoding {

    var items: [Item] = []
    var selectionIndexes: NSIndexSet = NSIndexSet()

    ...
}

class WindowController: NSWindowController {

    override var document: AnyObject? {
        didSet {
            if let document = self.document as? Document {
                self.contentViewController?.representedobject = document
            }
        }
    }

}

class SplitViewController: NssplitViewController {

    override var representedobject: AnyObject? {
        didSet {
            for viewController in self.childViewControllers as! [NSViewController] {
                viewController.representedobject = representedobject
            }
        }
    }
}

诀窍是将representObject绑定到storyboard中每个降序视图控制器的NSArrayController.您需要仅绑定contentArray,但也需要绑定selectionIndexes.

结果是两个降序NSArrayControllers上的selectionIndexes保持同步,因为它们通过中央数据源(上例中的DataSource子类)绑定.

为了使这一点更加清晰,我创建了一个示例项目,在此处演示:https://github.com/acwright/StoryboardBindingsExample

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...