gpt4 book ai didi

ios - 使用 segues 在 ViewController 之间传递数据的最佳方式

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:37 24 4
gpt4 key购买 nike

我阅读了一些关于使用 segues 将数据从 ViewController 传递到另一个的教程。

常见的方法不太好,恕我直言:源 ViewController 可以获得对目标 ViewController 的引用,以便它可以在目标 ViewController 中设置一些属性。但是源 ViewController 知道目标 ViewController 的某些部分这一事实必然会减少对象之间的解耦。

我想知道是否有可能像这样的更通用的方法:

  • 源 ViewController 执行一个 segue 并打包一个 NSDictionary包含它想要发送的数据(就像 NSNotifications 所做的那样),而不知道目标 ViewController 的特定属性
  • 目标 ViewController 可以访问 NSDictionary 并且它可以填充它自己的数据结构。

有人知道这是否可行吗?

最佳答案

prepareForSegue:sender: 是使用 Storyboard时将数据从一个 View Controller 传递到另一个 View Controller 的首选方式。观看Storyboard session from last year's WWDC ;您会看到 Apple 也推荐这种方法。

重申一下 sobri 所说的, View Controller 代码通常包含应用程序的“业务逻辑”,因此通常是应用程序中可重用性最低的代码。在撰写本文时,我在应用程序商店中有 7 个应用程序,而且我从未重复使用过任何重要的 View Controller 代码。

如果你想提供最细微的抽象(例如,避免对目标 View Controller 的硬依赖),你可以像下面这样。我的一个应用程序中几乎有这个确切的代码。

- (void) prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
if( [[segue identifier] isEqualToString:@"showLog"] ) {
UIViewController* logView = segue.destinationViewController;
if( [logView respondsToSelector:@selector(setManagedObjectContext:)] ) {
[logView setValue:self.managedObjectContext forKey:@"managedObjectContext"];
}
}
}

您可以使用 NSKeyValueCodingsetValuesForKeysWithDictionary: 对字典做类似的事情。我自己可能只会使用 多个 setValue:forKey: 调用

关于ios - 使用 segues 在 ViewController 之间传递数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10467474/

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