它正在丢失所有的值,因为您在创建新通知时传递了nil!如果要使其工作,必须传递键盘通知的用户信息字典。所以:
[[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
尽管如此,我还是想让另一个类自己监听键盘通知。