如何将 AppDelegate 中对象的引用传递给 ViewController
Posted
技术标签:
【中文标题】如何将 AppDelegate 中对象的引用传递给 ViewController【英文标题】:How can I pass referece from an object in AppDelgate to ViewControllers 【发布时间】:2012-05-02 13:14:23 【问题描述】:我在 Xcode 中使用情节提要创建了一个应用程序。该应用程序包含一个 UITabBarController (TBC) 和一些 UIViewControllers (VC),由 TBC 控制。
在 AppDelegate 中创建一个对象(我们称之为“myMidi”),它将监听传入的 MIDI 消息(CoreMidi)。所以我在我的 VC 中实现了这个 myMidi-Object 的接口。 我使用 Interface Builder (IB) 中的“关系”选项将视图连接到 TBC。
在 IB 中创建的所有 VC 都是我自己的 VC 类的实例。正如我之前提到的,在这个类中,我实现了我在 AppDelegate 中创建的 myMidi-Object 的接口。 因此,每个 VC 实例都拥有一个 myMidi-Object 的地址,现在需要在 AppDelegate 中创建的唯一引用。
所以我想知道如何访问当前的 VC 或当前显示的 TBC 以将此引用传递给我的 VC 类?
或者我还能如何解决这个问题。我想我应该在 AppDelegate 中的某个地方执行此操作,或者我也应该在 TBC 中保存引用并在创建 VC 时将其传递给每个新 VC!?
【问题讨论】:
【参考方案1】:如果我理解正确,您希望您的 MyMidi
类的当前(唯一?)实例可供您的 VC 使用?
如果您只有一个 Instance,请考虑将 MyMidi
设为单例类并为其提供类方法 à la + (MyMidi *)sharedInstance;
,它始终返回(并延迟初始化)相同的对象。这样,您就可以从任何地方访问它。
请参阅this question,了解如何在 Cocoa/Cocoa Touch 中实现单例。
【讨论】:
谢谢你的回答,我试试单例。 只需要一个实例和确保只创建一个实例是有区别的,一般来说前者更可取,例如除非您需要确保只能创建一个实例,否则不要使用单例...【参考方案2】:使用 nsdefaults setObjec:forKey:
传递对象并将其获取到您想要的位置。或者在 appdelegate 中创建一个属性并通过
AppDelegate* appDelegate = (TappAppDelegate*) [[UIApplication sharedApplication] delegate];
appDelegate.object = yourObject;
【讨论】:
以上是关于如何将 AppDelegate 中对象的引用传递给 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何将 ManagedObjectContext 快速传递给根视图控制器
如何将 CoreLocation 值从一个 VIewController 传递到 iOS 中的 AppDelegate?
如果它是子视图控制器,如何将 AppDelegate 中的 managedObjectContext 传递给正确的视图控制器?