从一个视图控制器向另一个视图控制器传输数据的最佳方法是什么?

时间:2013-08-27 19:42:45

标签: ios nsuserdefaults

我一直听到这个故事的两个不同方面。我听说nsuserdefaults是将数据从一个控制器传递到另一个控制器的最佳方式,而使用属性是最好的方法。我在stackoverflow上得到了一堆答案,现在想知道你们的想法。

3 个答案:

答案 0 :(得分:1)

没有最好的方法来传递数据,这实际上取决于您要解决的问题。据说dependency injection是最常见的,它只是实例化你的视图控制器并设置你需要的属性。

作为注释,NSUserDefaults绝对不应该用于在视图控制器之间传递数据,它应该用作在应用程序启动之间保持状态的方法。也许你指的是单身对象?

答案 1 :(得分:0)

虽然您当然可以使用NSUserDefaults来传递应用程序周围的信息,但我发现尽可能明确地传递信息通常更清晰,更明显。

例如,如果您有一个带有书名列表的视图控制器和另一个为您提供所选书籍详细信息的视图控制器,这将是一种将信息从一个书籍传递到另一个书籍的简单方法:

BookDetailsViewController *bookDetailsViewController = [[BookDetailsViewController alloc] init...];
bookDetailsViewController.book = selectedBook;

一个视图控制器有信息,另一个需要它,所以信息只是从它到达的地方传递。

如果信息必须以相反的方式返回,从呈现的视图控制器到其演示者,可以以类似的直接方式使用块或委派。

如果需要在整个应用中保存或使用信息,那么这就是NSUserDefaults和/或单身人士有用的地方。但总的来说,我不会将信息放在实际上不需要或使用的地方。

答案 2 :(得分:0)

当我需要从应用程序中的不同位置访问相同的数据时,我使用共享模型对象并将其用作单例。

需要它的每个对象都有一个弱引用,对象公开一个API来查询它的属性。

如果您还需要在此共享模型中保留数据,请使其实现NSCoding协议并添加方法以将其序列化为文件。