3

私はiPhoneアプリに取り組んでおり、実装していますCBCentralManager。また、plist をバックグラウンド モードで更新し、centralmanager を識別子で初期化しました。

また、このコードをdidFinishLaunchingWithOptions

if var centralManagerIdentifiers: NSArray = launchOptions?    [UIApplicationLaunchOptionsBluetoothCentralsKey] as? NSArray {
    // Awake as Bluetooth Central
    // No further logic here, will be handled by centralManager willRestoreState

    for identifier in  centralManagerIdentifiers {
        if identifier as NSString == "centralManager"{
            var notification = UILocalNotification()
            notification.alertBody = String(centralManagerIdentifiers.count) 
            notification.alertAction = "open" 
            notification.fireDate =  NSDate()
            notification.soundName = UILocalNotificationDefaultSoundName 
            UIApplication.sharedApplication().scheduleLocalNotification(notification)

            }
        }
}

別のクラスで中央マネージャーを作成しましたが、それはシングルトンです。

    class var sharedInstance: BLEManager {
    struct Singleton {
        static let instance = BLEManager()
    }

    return Singleton.instance
}


override init() {
    super.init()
    let centralQueue = dispatch_queue_create(“centralManager_queue”, DISPATCH_QUEUE_SERIAL)
    centralManager = CBCentralManager(delegate: self, queue: centralQueue, options: [CBCentralManagerOptionRestoreIdentifierKey : "centralManager"])
}

アプリを 1 日か 2 日使用しないと、周辺機器がアドバタイジングを開始すると、アプリが起動してこの通知が発生しますが、CBCentral デリゲート メソッドは呼び出されません。willRestoreState メソッドも実装しましたが、それもカードを取得していません。

ユースケース: アプリが使用されていなくても、周辺機器を接続し、広告が開始されたらデータを送信する必要があります。アプリが didFinishLaunchingWithOptions 呼び出しを取得したときに、接続プロセスをどこで処理する必要がありますか? did finishlaunch メソッドで centralManager を初期化する必要がありますか?

4

1 に答える 1

3

デリゲート呼び出しを処理するには、中央マネージャーをすぐに初期化する必要があります。CBPeripheralManager が作成され、デリゲートが init メソッドに渡されると、デリゲート メソッドが呼び出されます。マネージャの識別子が保留中のセッションと一致すると、状態が復元されます。

マネージャーをインスタンス化する良いポイントは、didFinishLaunchingWithOptionsメソッドにあります。

クラッシュを引き起こすか、テスト中に xCode の停止ボタンを押して、BLE によってトリガーされる新しいアクション (通知特性からの通知など) を待つことで、簡単にテストできます。システムが非アクティブのためにアプリを強制終了するのを数日待つよりもはるかに高速です.

于 2015-08-17T13:20:24.930 に答える