如何在Xcode中使用UIViewController的共享实例?

时间:2015-12-09 10:13:06

标签: ios objective-c uitableview

这可能听起来像是重复的,但我需要对我的场景有更深入的了解和解释。

在我的应用程序中,我有一个InfoViewController,它表示从其他Controller调用(推送)时的信息,如1)HomeViewController,2)FavouriteViewController和3)DownloadViewController。所有3个由UITabViewController

持有

InfoViewController有大约10个按钮和相应的操作。我使用单独的单例来保存所有信息对象。

所有3个ViewController(由TabVC持有) - >将对象加载到Singleton - > InfoViewController使用它来呈现详细信息

HomeViewController - 用于新的' Info'呈现,每天都在变化 当信息存在时,

用户可以将其标记为收藏夹,然后在FavoriteViewController上列出(在UITableView)。 用户可以将其保存在手机中以备将来参考,这将在DownloadViewController上列出(在UITableView中)。

在选择单元格时,所有3都使用InfoViewController表示细节。

现在我想在InfoViewController上只显示一个对用户可见的实例。并非所有3选项卡都是如此。目前我正在使用ViewDidDisappear方法将其切换回主屏幕。这只有在我将InfoViewController作为子节点添加到main 3 VC时才有效。不是推。

现在我的问题是,我尝试使用Appdelegate来初始化SharedInfo对象

sharedInfo = [InfoViewController alloc]init],但它会进入黑屏。我必须将其初始化为

[self.storyboard instantiateViewControllerWithIdentifier:@"InfoViewController"];

AppDelegate中不允许这样做,或者在InfoViewController本身上创建共享实例。

如何实现一次只向用户提供一个实例?

1 个答案:

答案 0 :(得分:1)

我认为改写你需要的东西可能有所帮助。我不认为你真的想要一个UIViewController的共享实例。您想要的是在一个或多个视图中显示的单个数据源,以及在数据更改时更新所有视图中的数据的方法。

两种可能的解决方案是:

NSNotification 包含共享数据的任何视图都会在更改数据时订阅通知。当通过单例更新数据时,它会向听取更新视图数据的任何人发送广播。

查看生命周期 在第二种方法中,特定视图中的数据仅在用户调出该视图时更新。请注意,在标签栏界面中,最初加载视图时会调用viewDidLoad。如果数据发生变化,请勿在此处更新数据。相反,您希望更新viewWillAppear中的数据,因为每次导航到该视图时都会调用此数据。在viewWillAppear中,您可以使用代码检查数据并在需要时对其进行更新。

还有其他方法可以为这只猫提供皮肤,但上述两种方法中的任何一种都适合你。