Apple documentation suggests to override an NSDocument convenience init (initWithType:error:) as described here.
However, as this is a convenience init, I cannot override it. But I still need to execute some code when a new document is created. I do not want to execute that code when I load a document.
In my particular case I try to initialise an NSPersistentDocument, but I doubt that is relevant.
What shall I do?
Above answer works for Swift 1.
It has to be changed to answer below in Swift 2:
convenience init(type typeName: String) throws {
self.init()
// Rest of initialization code here
}
This was answered here: http://meandmark.com/blog/2015/07/nsdocument-initwithtype-in-swift-2/
Reposted for convenience since this is a common problem.
To execute init code for a new document:
// Create new document (only called for new documents)
convenience init?(type typeName: String, error outError: NSErrorPointer) {
self.init()
fileType = typeName
// add your own initialisation for new document here
}
The problem in Swift is that you can not call a convenience initializer in super. Instead you must delegate to a designated initializer in self. This means that you can't take advantage of any of supers convenience initializers and you must implement the initialization your self---hence fileType = typeName
above. As much as I like Swift, I find this stupid: what's the point of re-implementing code that could be reused!?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With