gpt4 book ai didi

iOS:委托(delegate) VC 不直接连接到其他 VC 的委托(delegate)困境

转载 作者:行者123 更新时间:2023-11-28 22:50:17 26 4
gpt4 key购买 nike

在我的应用程序中,我关注三个 View Controller 。第一个包含一个 map 和一个按钮来打开第二个 View Controller 。第二个 View Controller 包含一个可搜索的表,然后当用户选择一行时,它将相关数据加载到第三个 View Controller 中。这一切都很好!

现在的意图是,当用户在第三个 View Controller 中按下 Show on Map 按钮时,它会将数据(在本例中为坐标的两个 double 值)传回第一个 View Controller ,以便第一个 View 然后 Controller 可以关注这些坐标。

我遵循了 Apple 的文档(BirdSighting 教程)以及之前关于 SO 的问题/答案,但我注意到一个问题。

我真的找不到地方将第三个 View Controller 的委托(delegate)设置为第一个 View Controller 。通常我会在第一个 VC 中输入以下代码,但我不会创建第三个 VC 的实例 - 这发生在第二个 VC 中:

thirdVC.delegate = self;  //set self as the delegate

那我该怎么办呢?

谢谢

最佳答案

委托(delegate)是完成您需要的众多机制之一。 @onnoweb 的建议非常合适,尽管传递委托(delegate)指针可能会造成困惑。

KVO:您还可以考虑 KVO,将您的数据放入模型对象,让 VC3 更新模型对象,然后 VC1 作为这些值的观察者。

NSNotificationCenter:另一种选择是 NSNotificationCenter

在 VC3 中,使用它来发送广播(将您的字典设置为包含您的纬度/经度坐标):

[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowOnMap" object:[NSDictionary dictionaryWithObjects:objects forKey:keys]];

在 VC1 中:

注册接收广播:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onShowOnMap:) name:@"ShowOnMap" object:nil];

并处理广播:

-(void) onShowOnMap:(NSNotification *)notification
{
NSDictionary *values = [notification object];
.
.
.
}

并在你的 dealloc 中取消注册

关于iOS:委托(delegate) VC 不直接连接到其他 VC 的委托(delegate)困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12147764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com