There's little documentation on this, so after using a support request I now know:
- This is as-designed. If you do not specifically set the value of automaticSpellingCorrectionEnabled, on an NSTextView then the value for NSAutomaticSpellingCorrectionEnabled in global domain (i.e. System Preferences) is used. However this is a read-only process and changing the menu state in your app will not update the global value, so it needs to be stored locally. Note there is no global preference for "Check Spelling While Typing" (continuousSpellCheckingEnabled) and this is assumed to be NO by default.
- This is also as-designed. It's up to the developer to set the values on each NSTextView as required.
It is necessary to override:
in the NSTextView subclass to handle the user's interactions with these menus and save the new values as needed. Remember to call super at the end!