我正在尝试调试在 ios 6 上使用 ARC 在 NSNotification 中将 NSDictionary 作为我的 userInfo 传递时看到的一个奇怪问题。这是我的相关代码:
发送通知:
NSDictionary *feedData = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];
NSDictionary* finalData = [[NSDictionary alloc] initWithObjectsAndKeys:@"index", [NSNumber numberWithInt:i], @"myKey", feedData, nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object: nil userInfo:finalData];
我的处理程序注册:
[[NSNotificationCenter defaultCenter] addObserver:frcvc selector:@selector(mySelector:) name:@"myNotification" object:NULL];
我的处理程序声明:
-(void)mySelector:(NSNotification*)notification;
我的处理程序定义在我的 MyCollectionViewController 类中:
- (void)mySelector:(NSNotification*) notification
{
NSDictionary* myDict = (NSDictionary*)notification.userInfo;
int index = [[myDict objectForKey:@"index"] integerValue];
NSDictionary* myFeed = (NSDictionary*)[myDict objectForKey:@"myKey"];
}
当我运行代码时,我可以看到 finalData 正在构建,并且我记下了内存地址。当我到达回调并提取 userInfo 时,它是相同的内存地址,但 xcode 似乎认为它是 MyCollectionViewController* 类型。当我尝试访问 index 或 myFeed 时,它为空。但是在我的输出窗口中,我可以输入
“p 我的字典”
并且它正确显示 NSDictionary* 与构造时具有相同的内存地址!如果我输入
“我的字典”
它显示了正确的字典键和值!到底是怎么回事?!我试过重建干净,但这没有帮助。内存似乎很好,因为我得到了正确的地址并且似乎可以在调试窗口中访问它。谢谢你的帮助!