Yeah, the easiest solution was to not use a dictionary but use a class,
which copied the data into the dictionary.

Here is the top level sheet:

class PMSRConfigurationSheet: NSWindowController {

dynamic var metadata: [String : AnyObject] = [String : AnyObject]()


override class func keyPathsForValuesAffectingValueForKey(key: String) ->
Set<String> {

if (key != "metadata") {

return ["metadata"]

} else {

return []

}

}


@IBOutlet var objectController: NSObjectController?


@IBAction func apply(sender: AnyObject?) {

objectController?.commitEditing()


if let window = self.window {

if let sheetParent = window.sheetParent {

sheetParent.endSheet(window, returnCode: NSModalResponseContinue)

}

}

}


@IBAction func cancel(sender: AnyObject?) {

objectController?.discardEditing()


if let window = self.window {

if let sheetParent = window.sheetParent {

sheetParent.endSheet(window, returnCode: NSModalResponseAbort)

}

}

}

}

Here is the actually subclass with some properties:

@objc(PMSRExpenseReportConfigurationSheet)

class PMSRExpenseReportConfigurationSheet: PMSRConfigurationSheet {

dynamic var startDate: NSDate? {

get {

return self.metadata["startDate"] as? NSDate

}

set(value) {

self.metadata["startDate"] = value

}

}


dynamic var endDate: NSDate? {

get {

return self.metadata["endDate"] as? NSDate

}

set(value) {

self.metadata["endDate"] = value

}

}

override init(window: NSWindow?) {

super.init(window: window)

}


required init?(coder: NSCoder) {

super.init(coder: coder)

}


init() {

self.init(windowNibName: "PMSRExpenseReportConfigurationSheet")

}


override func apply(sender: AnyObject?) {

print("Date range: \(self.startDate) -> \(self.endDate)")

super.apply(sender)

}

}

Works perfectly!
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to