Это теряет все значения, потому что вы передали ноль, когда вы создали новое уведомление! Вы должны передать словарь userInfo уведомлений клавиатуры, если вы хотите, чтобы это работало. Итак:
[[NSNotificationCenter defaultCenter]
postNotificationName:@"doSomething" object:self userInfo:userInfo];
В этом случае объектом, создающим это уведомление, является этот объект. Если вы хотите, чтобы это выглядело как исходящее от объекта клавиатуры, отправьте [notification object]
для объекта, но я не рекомендую этого. Кроме того, почему бы просто не иметь класс, который вы хотите ответить на эти уведомления, ТАКЖЕ прослушивать уведомления клавиатуры? Создание и отправка нового уведомления с помощью функции обратного вызова для уведомлений с клавиатуры кажется мне несколько обременительной. Другой вариант - создать объект в стиле делегата, в котором класс (я предполагаю, что контроллер представления или что-то в этом роде?) Фактически прослушивает уведомления клавиатуры, затем вызывает объект делегата (другой класс, которому вы хотите переслать эту информацию) и передает словарь userInfo напрямую. Итак:
// Assume a proper delegate is set and it responds to - (void)doSomething:(NSDictionary*)userInfo
[delegate doSomething:userInfo]; // from within the keyboard notification
Тем не менее, я думаю, я бы просто попросил этот другой класс прослушивать уведомления клавиатуры.