-1

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

4

3 回答 3

1

没有传递数据的最佳方法,这实际上取决于您要解决的问题。话虽这么说dependency injection是最常见的一种,即简单地实例化您的视图控制器并设置您需要的属性。

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

于 2013-08-27T19:48:54.813 回答
0

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

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

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

于 2013-08-27T20:00:28.033 回答
0

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

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

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

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

如果信息必须以另一种方式返回,从呈现的视图控制器到其呈现器,可以以类似直接的方式使用块或委托。

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

于 2013-08-27T19:53:35.623 回答