从NSNumber到枚举的错误值

时间:2013-09-11 07:37:42

标签: iphone objective-c enums nsnotification

我正在发送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;

4 个答案:

答案 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}]