Use a void* as the KVO context. Saves us those horrible typecasts and makes the code more readable. Also, strings may get uniqued, so if someone were to use the same string (unlikely in this case), they’d get the same pointer value.
Check return value of init.