我正在尝试调试一个奇怪的问题,我在使用ARC on ios 6在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时,它为null。但是在我的输出窗口中,我可以输入
“p myDict”
它正确显示NSDictionary *与构造时的内存地址相同!如果我输入
“po myDict”
它显示正确的字典键和值!到底是怎么回事?!我试过重建清洁,但这没有帮助。内存似乎很好,因为我得到了正确的地址,似乎可以在调试窗口中访问它。谢谢你的帮助!
答案 0 :(得分:0)
您的对象和密钥顺序错误:
NSDictionary* finalData = [[NSDictionary alloc] initWithObjectsAndKeys:@"index", [NSNumber numberWithInt:i], @"myKey", feedData, nil];
应该是:
NSDictionary* finalData = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithInt:i], @"index", feedData, @"myKey", nil];
甚至更好,使用Objective-C Literals:
NSDictionary* finalData = @{@"index": [NSNumber numberWithInt:i], @"myKey": feedData};