【问题标题】:UIViewController as a singletonUIViewController 作为单例
【发布时间】:2011-04-25 18:36:24
【问题描述】:

我在标签栏应用程序中有一个 UIViewController。我已经从 MainWindow.nib 文件中添加了控制器(即不是以编程方式)。

我的问题是如何使我的视图控制器成为单例? (解决 Facebook 代表问题)。

【问题讨论】:

  • 这是一个非常糟糕的主意。正是这种对单例的滥用,使得许多更有经验的程序员建议一起避免它们。
  • 不,但是将视图控制器实现为单例确实很可疑。

标签: iphone ios uiviewcontroller singleton


【解决方案1】:

您可能希望将“Facebook 连接代码”设为单例(或应用程序委托的一部分),而不是视图控制器本身。然后只需将 FB 的东西与任何需要它的视图控制器连接起来。

【讨论】:

    【解决方案2】:

    如果您真的想创建单例(但我不认为您这样做,请重新考虑您的设计 - 究竟什么是“facebook 代表问题”?),请看这里in Apple's sample code

    【讨论】:

    • 嗨,我真的不想这样做,但在阅读了一些类似的帖子后:stackoverflow.com/questions/4215797/…stackoverflow.com/questions/4244609/fbdidlogin-not-called 我觉得这是唯一的解决方案。
    • 上周我自己做了一个 FB 控制器。在这个视图控制器的生产过程中没有单例受到伤害;-)
    • 澄清一下,如果使用 FB 库的多个客户端确实存在问题(我不知道,只是从您的评论中猜测)那么您仍然应该没有问题,视图控制器是不是凭空创造的。
    • @OK,那么您是如何让代理工作的呢?在我的应用程序委托中,我添加了 someView=[[SomeView alloc]init] 然后我按照建议实现了 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {。但是,我的 SomeView 控制器中的 fbDidLogin 方法没有声音。
    • 我使用了来自 FB SDK 的股票代码,它工作正常。您是否尝试过使用“内联 Web 视图”授权样式?顺便说一句,我的应用程序适用于两种样式。你说你使用 nib,但同时也使用程序化实例化(someView=[[SomeView alloc]init])?
    【解决方案3】:

    您可以将任何类设为单例,将类似的内容添加到 .m 文件中(并且您还必须在 .h 中添加声明):

    + (id)sharedInstance {
      static id sharedInstance;
      @synchronized(self) {
        if (!sharedInstance)
          sharedInstance = [[ClassName alloc] init];
        return sharedInstance;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2014-04-19
      相关资源
      最近更新 更多