我正在发送enum里面的通知:
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTitle object:nil userInfo:@{[NSNumber numberWithInt:option2]:kNotificationName}];
接收它:
- (void)myAction:(NSNotification *)notification {
MyState myState = (MyState)[[[notification userInfo] objectForKey:kNotificationName] integerValue];
问题是myState的值有误。当我打印通知时,我得到:
Printing description of notification:
NSConcreteNotification 0x123456 {name = notificationTitle; userInfo = {2 = notificationName;}}
但myState == option0。
为什么会这样?
编辑:
typedef enum myStates {
option0,
option1,
option2,
option3
} MyState;
答案 0 :(得分:1)
尝试编写这样的枚举函数: -
typedef enum myStates {
option0 = 0,
option1,
option2,
option3
} MyState;
并打印个人信息,例如您的通知输出以及myState对象的输出结果。
答案 1 :(得分:1)
我不会使用NSNotification(因为你已经发现,没有编译时检查,并且在很多情况下使用非常麻烦)。相反,更好的选择可能是使用像Tolo这样的事件总线 - 非常容易使用并自动删除dealloc上的订阅者。你只想写:
@interface EventStateChanged : NSObject
@property(nonatomic) MyState state;
@end
SUBSCRIBE(EventStateChanged)
{
MyState state = event.state;
// Do something with state.
}
检查出来。
答案 2 :(得分:0)
看起来你得到了价值和钥匙。
字典应该像这样使用:@{key:value}
试试这个:
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTitle object:nil userInfo:@{kNotificationName:[NSNumber numberWithInt:option2]}];
希望有所帮助:)
答案 3 :(得分:0)
用户信息是一个键=>价值字典:
userInfo:@{[NSNumber numberWithInt:option2]:kNotificationName}];
这里有值=>键。试试这个:
@{kNotificationName:@{option2}]