我正在尝试在2个VC之间传递一个对象,从弹出框到分割视图控制器的详细视图。
我想我需要使用NSNotificationCenter。
我试过这个,但似乎无法让它发挥作用。
在didSelectRow
的popover中
[[NSNotificationCenter defaultCenter] postNotificationName:@"PassObject" withObject:objectToPass];
在detail VC
- (void) didReceiveNotificationPassObject:(NSNotification*)notification
{
YourObjectClass *theObject = (YourObjectClass*)notification.object;
}
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotificationPassObject:) name:@"PassObject" object:nil];
}
答案 0 :(得分:0)
您面临的问题是什么? didReceiveNotificationPassObject:
命中了吗?如果没有,您可以验证viewDidLoad
之前执行didSelectRow
。
使用[[NSNotificationCenter defaultCenter] postNotificationName:@"PassObject" object:objectToPass];
代替[[NSNotificationCenter defaultCenter] postNotificationName:@"PassObject" withObject:objectToPass];
另外,请不要忘记removeObserver
中的viewDidUnload
。
HTH,
阿克沙伊
答案 1 :(得分:0)
输入问题时可能只是一个拼写错误,但在发布通知的第一行
[[NSNotificationCenter defaultCenter] postNotificationName:@"PassObject" withObject:objectToPass];
方法签名错误 - 它应该是'object:objectToPass'而不是'withObject:objectToPass'。你在那里的行将在运行时编译并发出警告并崩溃。
除此之外,所有逻辑似乎都很好。
答案 2 :(得分:0)
使用多个参数进行通知的快速简便的解决方案是调用此通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"shareButton" object:@"camera"];
“相机”就像你的参数一样。然后
- (void)shareButton:(id)sender
{
NSString *kindOf = [sender object];
if ([kindOf isEqualToString:@"camera"]) {
// Your code goes here
}
}