From some stuff I read, this may not work correctly:
 In general, a key can be any object (provided that it conforms to the NSCopying protocol—see below)

But I can't find the "see below" part in the docs.  I'm a little unclear why the set on line 44 doesn't generate a warning.