gpt4 book ai didi

iOS:将数据从 ChildViewController 传递到 GrandParentViewController?

转载 作者:行者123 更新时间:2023-11-29 02:29:22 25 4
gpt4 key购买 nike

在两个 View Controller 之间传递数据似乎已经使用委托(delegate)解决了。我的情况略有不同,因为我是新手,所以我不知道我是否可以与代表一起解决这个问题。

我有 3 个 View Controller 。 祖 parent parent child
GrandParent 实例化显示 CategoryGroups 列表的 Parent
单击 CategoryGroup 实例化显示 Categories 列表的 Child View Controller。

我希望当用户点击任何 Category 时,GrandParent 会知道正在点击的 Category

我现在有什么?

Child.h View Controller 上

@protocol CategorySelectDelegate<NSObject>
- (void) categorySelected:(CategoryModel *) categoryModel;
@end

Child.m View Controller 上

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"selected category:%@", _categories[(NSUInteger) indexPath.row]);
[self.delegate categorySelected:_categories[(NSUInteger) indexPath.row]];
[self dismissViewControllerAnimated:YES completion:nil];
}

GrandParent.h

@interface GrandParent : UIViewController<CategorySelectDelegate>  

GrandParent.m

- (void)viewDidLoad {
[super viewDidLoad];
ChildViewController *categoryViewController = [[ChildViewController alloc] init];
childViewController.delegate = self;
}

- (void)categorySelected:(CategoryModel *)categoryModel {
_categoryLabel.text = categoryModel.name;
NSLog(@"categoryLabel:%@", _categoryLabel.text);
}

但我知道这是不正确的,因为 GrandParent 不是 直接实例化 Child 的那个,总是父 的诞生> child

问题
- 如何将 categoryModelChild 传递给 GrandParent
- 通常,如何将数据从一个子 Controller 传递回任何祖先 Controller ?

更新

目前,我已经添加了 2 个代表来解决这个问题
a.) 1 个委托(delegate)从 ChildParent
b.) 1 个委托(delegate)从 ParentGrandParent
这行得通,但我认为这不是一个好的设计,因为数据需要在 2 个或更多 View Controller 之间传递,因为最终会创建新的委托(delegate)来传递值。

最佳答案

我有或多或少相同的用例,我更喜欢通知,因为它似乎是松散耦合的对象,

仅仅为了交换数据​​而创建委托(delegate)并不是一个好的选择。

请引用How Best to Use Delegates and Notifications它说,

通知导致对象之间的松散耦合。耦合是松散的,因为发送通知的对象不知道什么在监听通知。 他的松散耦合非常强大,因为多个对象都可以注册收听同一个通知因此,如果其他 View Controller 或任何其他小部件想要处理数据,则无需再设置一个委托(delegate)即可轻松实现。

但是这条线也成立

通知和委托(delegate)提供如此不同的耦合这一事实表明它们应该在不同的场景中使用。如果 TableView 使用通知而不是委托(delegate),则使用 TableView 的所有类都可以为每个通知选择不同的方法名称。这会使代码难以理解,因为您需要去查找通知注册以确定调用了哪个方法。对于委托(delegate),很明显:所有使用 TableView 的类都必须以相同的方式进行结构化。

关于iOS:将数据从 ChildViewController 传递到 GrandParentViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097334/

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