【问题标题】:How to Keep class alive between views?如何在视图之间保持课堂活力?
【发布时间】:2015-02-16 19:06:05
【问题描述】:

我们有一些蓝牙类,可以创建与蓝牙模块的连接。 只要这个类是活着的,连接就是活着的。 我们正在 viewA 中创建该类实例。 当我们转到 viewB 时,我们希望通过将 BL 类传递给下一个视图 viewB 来保持其存活。

我们将如何做到这一点(没有单例,只是传递它,或者使用应用委托)

viewA

//creating the instance of the BL class

   self.bluetooth=[[BLEModule alloc] init];
    self.bluetooth.delegate=self;
  ...
  ....
//go the next view-viewB (now pass that instance self.bluetooth to viewB)

        UIViewController *next=[[CallTestView alloc]init];
        AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        [UIView transitionFromView:delegate.window.rootViewController.view
                            toView:next.view
                          duration:1.5f
                           options:UIViewAnimationOptionTransitionFlipFromLeft
                        completion:^(BOOL finished)
         {
             delegate.window.rootViewController=next;

         }];

【问题讨论】:

  • 你可以通过在 appdelegate.h 中将你的 BL 类声明为 strong 来做到这一点,(like-property(strong, nonatomic) BLEModule *bluetooth & alloc init at didfinishlaunching。这样你的类将在整个过程中保持活跃整个应用程序。您可以在任何地方使用它(例如 - appdelegate.bluetooth)

标签: ios objective-c


【解决方案1】:

首先,使用AppDelegate 有点像单例(您保留对一个已初始化一次的对象的引用,并在有人询问时将引用传递给它)。

但要回答您的问题,您有几种方法可以完成此操作

1) 委托 - viewAviewB 的委托,您可以在它们之间传递信息。看看这个Link

2) KVO - viewB 注册到一个“广播电台”并收听按摩和viewA 广播到那个“广播电台”,通过那个你可以在viewAviewB 之间传递信息(甚至多个视图之间)。看看这个Link

3) segue - 您可以在viewAviewB 之间通过segue 传递信息(如果它们与一个连接)。检查这个Link

上述每种方法都有优点和缺点。您需要找出最适合您的情况的方法

【讨论】:

  • 谢谢,但这实际上不是我的问题。我知道代表是什么,并且我知道在视图之间传递数据的方法。我的目标是当 viewA 失效时,我将从 viewA 传递到下一个视图,即在 viewA 中创建的 BL 类的一个实例。所以在 viewA 死之前,他会将 BL 实例发送到下一个视图。
  • 您是否尝试过使用 viewWillDisappear/viewDidDisappear?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
相关资源
最近更新 更多