Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 来自嵌套导航堆栈的委派_Objective C_Ios - Fatal编程技术网

Objective c 来自嵌套导航堆栈的委派

Objective c 来自嵌套导航堆栈的委派,objective-c,ios,Objective C,Ios,我有标准视图控制器作为它上面的模态视图控制器的代理。 此模式视图控制器包含在导航控制器中 在呈现模式并将另一个视图控制器推到导航堆栈上之后,我想将一些数据传递回初始代理视图控制器(呈现模式的) 我是否应该首先将消息从导航堆栈传递回模态导航控制器的根视图控制器,然后只使用该控制器的委托方法 或 我是否应该将delegate属性传递给嵌套的视图控制器,然后使用实现的单独协议直接调用该委托。这样做是可行的,但我必须使用 @property (nonatomic, weak) id delegate;

我有标准视图控制器作为它上面的模态视图控制器的代理。 此模式视图控制器包含在导航控制器中

在呈现模式并将另一个视图控制器推到导航堆栈上之后,我想将一些数据传递回初始代理视图控制器(呈现模式的)

我是否应该首先将消息从导航堆栈传递回模态导航控制器的根视图控制器,然后只使用该控制器的委托方法

我是否应该将delegate属性传递给嵌套的视图控制器,然后使用实现的单独协议直接调用该委托。这样做是可行的,但我必须使用

@property (nonatomic, weak) id delegate;
而不是

@property (nonatomic, weak) id <NestedViewDelegate> delegate;
{

NestedViewController*nest=[[NestedViewController alloc]init];
//@property-id委托
[nest setDelegate:[自委托]];
[[self-navigationController]pushViewController:nest动画:是];
}

这种情况下的最佳实践是什么


谢谢

< P>我会考虑使用通知来解耦这个。结帐通知中心

您可以在根目录中注册通知,并在子目录中发布

示例

在子对象中,可以执行以下操作:

[[NSNotificationCenter defaultCenter] postNotificationName:kMyNotificationName object:self userInfo:@{ @"key" : @"value" }]];
- (void)myNotificationName:(NSNotification *)note
{
     NSDictionary *userInfo = [note userInfo];

     // Do stuff using the information passed in.
}
kMyNotificationName
是在共享位置定义的,如pch或a Constants.h

在根目录中,您可以在
init
中或在推孩子时执行类似操作

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationName:) name:kMyNotificationName object:nil];
不要忘记在dealloc中或在弹出孩子时删除观察者

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationName:) name:kMyNotificationName object:nil];
现在,您可以像这样处理通知:

[[NSNotificationCenter defaultCenter] postNotificationName:kMyNotificationName object:self userInfo:@{ @"key" : @"value" }]];
- (void)myNotificationName:(NSNotification *)note
{
     NSDictionary *userInfo = [note userInfo];

     // Do stuff using the information passed in.
}

<>我会考虑使用通知来去耦这一点。结帐通知中心

您可以在根目录中注册通知,并在子目录中发布

示例

在子对象中,可以执行以下操作:

[[NSNotificationCenter defaultCenter] postNotificationName:kMyNotificationName object:self userInfo:@{ @"key" : @"value" }]];
- (void)myNotificationName:(NSNotification *)note
{
     NSDictionary *userInfo = [note userInfo];

     // Do stuff using the information passed in.
}
kMyNotificationName
是在共享位置定义的,如pch或a Constants.h

在根目录中,您可以在
init
中或在推孩子时执行类似操作

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationName:) name:kMyNotificationName object:nil];
不要忘记在dealloc中或在弹出孩子时删除观察者

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationName:) name:kMyNotificationName object:nil];
现在,您可以像这样处理通知:

[[NSNotificationCenter defaultCenter] postNotificationName:kMyNotificationName object:self userInfo:@{ @"key" : @"value" }]];
- (void)myNotificationName:(NSNotification *)note
{
     NSDictionary *userInfo = [note userInfo];

     // Do stuff using the information passed in.
}

嘿,Cameron,你成功实施了这个解决方案吗?你是如何解决这个问题的?我正在寻找一个解决方案,因为我也遇到了同样的问题。为了深入了解导航堆栈中视图控制器的更改,使用委派并将其链接备份是很麻烦的。我强烈建议您使用通知。@logancautrell您好,您能否编辑您的帖子,获取一段关于如何注册该通知并在child中发布的代码片段?我遇到了同样的问题:(当然,给我几分钟时间:DHey Cameron,你成功实施了这个解决方案吗?你是如何解决这个问题的?我正在寻找解决方案,因为我也有同样的问题。要了解导航堆栈中视图控制器的更改,使用委派并将其链接备份很麻烦。我强烈建议使用notifica注意。@logancautrell嗨,你能编辑你的帖子,获取一段关于如何注册该通知并在child中发布的代码吗?我遇到了同样的问题:(当然,给我几分钟:DHey Cameron,你成功实施了一个解决方案吗?你是如何解决这个问题的?我正在寻找一个解决方案,因为我有同样的问题。我认为通知是最简单的。嘿Cameron,你成功实施了一个解决方案吗?你是如何解决这个问题的?我正在寻找一个解决方案,因为我有同样的问题。我认为通知是最简单的。