【问题标题】:How can I pass referece from an object in AppDelgate to ViewControllers如何将 AppDelegate 中对象的引用传递给 ViewController
【发布时间】: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!?

【问题讨论】:

    标签: iphone ios ipad ios5 coremidi


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多