我正在尝试使用NSNotification。我根据在视图中按下了哪些按钮创建了一个NSDictionary。当我NSLog标记时,标记是正确的。所以我使用这样的switch语句来创建我的字典:
NSDictionary *dict;
switch (tag) {
case 0:
dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:tag] forKey:@"ButtonType"];
break;
case 1:
dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil];
break;
case 2:
dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil];
break;
case 3:
dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil];
break;
case 4:
dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil];
break;
default:
NSLog(@"No dictionary set for ButtonType");
break;
}
[[NSNotificationCenter defaultCenter] postNotificationName:(ShowData:) object:self userInfo:dict];
然后在ShowData:
- (void)ShowData:(NSNotification *)notification {
NSLog(@"%s", __FUNCTION__);
NSDictionary *userDict = [notification userInfo];
NSInteger theTag = (NSInteger)[userDict objectForKey:@"ButtonType"];
NSLog(@"tag: %i", theTag); // this value is incorrect
在我的ShowData方法中,我期望相同的标记值,0-4,但我得到类似的东西:187742848。当我单步执行调试器时,我看到我的NSDictionary userInfo被设置为传递的值。我没有创建我的NSDictionary正确传递给ShowData:?感谢。
答案 0 :(得分:2)
不要转换从字典返回的对象,而是调用integerValue
。
[[userDict objectForKey:@"ButtonType"] integerValue];
答案 1 :(得分:0)
我想我无法将NSNumber转换为NSInteger。我需要使用NSNumber中的integerValue,我得到了正确的标记值。