使用NSNotication将userInfo(NSDictionary)传递给另一个对象

时间:2011-10-17 17:54:01

标签: iphone nsdictionary nsnotifications

我正在尝试使用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:?感谢。

2 个答案:

答案 0 :(得分:2)

不要转换从字典返回的对象,而是调用integerValue

[[userDict objectForKey:@"ButtonType"] integerValue];

答案 1 :(得分:0)

我想我无法将NSNumber转换为NSInteger。我需要使用NSNumber中的integerValue,我得到了正确的标记值。