如何在视图

时间:2016-01-11 23:05:28

标签: ios objective-c core-bluetooth cbperipheral cbperipheralmanager

我已经基于Apples CoreBluetooth TemperatureSensor示例(https://developer.apple.com/library/ios/samplecode/TemperatureSensor/Introduction/Intro.html)为应用程序实现了CoreBluetooth。它可以很好地搜索设备,在tableview中填充结果,选择一个并连接。我的问题是我希望在整个应用程序的视图之间保持连接。

在我当前的设置中,我有一个带有按钮的视图,可以转到蓝牙设置视图。蓝牙视图以模态方式呈现,在这里我搜索BT设备并连接到其中一个。一旦我解除了视图,连接就会丢失,可能是因为它没有被保留?

因此我使用单例实现来保持对象(也像在Apples示例中一样)希望保持连接活着,但没有运气。然而,我可以从单例中检索对象并调用connectPeripheral并重新连接,但从用户的角度来看,用户在刚刚连接之后必须再次输入密码并不是那么好。

那么,如何在视图之间保持蓝牙连接,例如当有设置视图连接BT设备,然后在剩余的应用程序中使用相同的连接?

更新:包含代码

另外值得一提的是,我的类(包括共享实例)不仅基于Apple示例,还基于HMSoft的SerialGATT实现(我猜这是基于Apples实现)。这是我在git https://github.com/ezefranca/kit-iot-wearable-ios/blob/master/kit-iot-wearable-ios/SerialGATT.h

上找到的一个地方的链接

因此,对于我的单身人士,我已将以下内容添加到SerialGATT.h中(也尝试使用id,而不是它有所作为)

+ (SerialGATT *)sharedManager;

在SerialGATT.m中我有

+ (SerialGATT*)sharedManager {
    static SerialGATT *_sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedInstance = [[self alloc] init];
    });

    return _sharedInstance;
}

在我的蓝牙视图控制器中使用SerialGATT和单例时,我实现了SerialGATT的委托方法,然后我在viewDidLoad中有以下内容

[[SerialGATT sharedManager] setup];
[[SerialGATT sharedManager] setDiscoveryDelegate:self];

NB!我从原始的SerialGATT示例重命名了discoveryDelegate,之后它被简单地命名为“delegate”。 discoveryDelegate是Apples示例中使用的名称,并不重要。

从这里开始,我的模态蓝牙设置视图中的一切正常。如上所述,我可以搜索和连接设备。代表们正在被召集,一切都很好,花花公子。但是,当我关闭模式时,设备断开连接,但是当访问单例时我仍然可以在其他视图中找到该对象,例如重新连接。但话说回来,我宁愿保持连接的存在,而不是重新连接,不得不再次输入密码。

0 个答案:

没有答案