What you describe isn't really doable. Mutating the dictionary after calling super:

* May not work, as `NSError` is perfectly entitled to copy the dictionary, rather than retain it
* Would be sort of lying to `NSError`. We hand it an object we claim to behave as an immutable dictionary, but then actually mutate it

Besides, in practice, this `-init…` method isn't going to return `nil`.

The important thing when overriding an initialiser is to not touch instance variables until super has been called, in case it returns a different object. My code does not touch any instance variables in any way, so is safe in that regard.