NSNotifications name best practice
As for using constant strings in your project, there’s another question on Stack Overflow about that: Constants in Objective C.
As for naming notifications, Coding Guidelines for Cocoa suggests the following:
Notifications are identified by global NSString objects whose names are composed in this way:
[Name of associated class] + [Did | Will] + [UniquePartOfName] + Notification
This doesn't follow the Apple-suggested format exactly, nor does it directly answer your question, but I thought I'd share these handy-dandy text macros that I use to spare myself a little typing when making notification and key names. You can assign these a keyboard shortcut, type in and select the [Did|Will] + [UniquePartOfName]
segment, then hit the shortcut to produce the variable and its value. You could also use $(FILENAMEASIDENTIFIER)
instead of $(PROJECTNAME)
if you were defining these strings in the header of a particular class, and that would conform to the suggestion.
//MARK: Notification strings { /* * Use the selection to make the name and string for a Notification. * The string has a prefix placeholder, defaulting to the project name. */ Identifier = objc.notestring; BasedOn = objc; IsMenuItem = YES; Name = "Notification Name From Selection"; TextString = "<#$(PROJECTNAME)#><#!notename!#>Notification = @\"<#$(PROJECTNAME)#><#!notename!#>Notification\";"; CompletionPrefix = notestring; }, { /* * Insert placeholders to make the name and string for a Notification. * This is for use without a selection, and so "only" activates at the * beginning of the line. */ Identifier = objc.notestring.bol; BasedOn = objc.notestring; IsMenuItem = YES; Name = "Notification Name From Selection"; OnlyAtBOL = YES; CompletionPrefix = notestring; },//MARK: Default Key strings { /* * Convert the selection into a name and string for use in the User * Defaults system. The string has a placeholder for a prefix, which * defaults to the project name. */ Identifier = objc.defaultskeystring; BasedOn = objc; IsMenuItem = YES; Name = "UserDefaults Key From Selection"; OnlyAtBOL = NO; TextString = "<#$(PROJECTNAME)#><#!keyname!#>Key = @\"<#$(PROJECTNAME)#><#!keyname!#>Key\";"; CompletionPrefix = defaultskey; }, { /* * Insert placeholders to make the name and string for a a key for the * User Defaults system. This is for use without a selection, and so * "only" activates at the beginning of the line. */ Identifier = objc.defaultskeystring.bol; BasedOn = objc.defaultskeystring; IsMenuItem = YES; OnlyAtBOL = YES; Name = "UserDefaults Key From Selection"; CompletionPrefix = defaultskey; },
These are Xcode 3 macros. I know the macro system is different in Xcode 4 (which I'm not using yet), but I believe the conversion is simple and can be automated.