also, using `setValue:forKey:`, if `value` was nil it would call `removeObjectForKey:` instead of throwing an exception.