Adding a new entry to a dictionary does two things (in addition to adding it to the dictionary, obviously):
- It takes a copy of the key value. This means that the the key object must implement the
NSCopying
protocol
retain
s the value. This means that it needs to implement the NSObject
protocol
It's probably the second that's causing your EXC_BAD_ACCESS
.
There are at least two ways around this.
Firstly, rather than adding the selector you could add the instance of the class that implements the selector to your dictionary. Usually your class will inherit from NSObject
and it will work fine. Note that it will retain the class though, maybe not what you want.
Secondly, you can convert a selector to a string (and back again) using NSSelectorFromString
and NSStringFromSelector
(docs are here).