2014-02-24 10 views
5

Ich mache eine App mit CoreBluetooth und ich möchte, dass es im Hintergrund läuft und bluetoothbezogene Aufgaben ausführt.CoreBluetooth backgound - Wie stelle ich die zentralen Managerobjekte in appdelegate wieder her?

Kann mir jemand erklären, wie man die zentralen Manager-Objekte im appdelegate wiederherstellt?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSArray *centralManagerIdentifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey]; 

    for (NSString *identifier in centralManagerIdentifiers) { 

     if ([identifier isEqualToString:@"myCentral"]) { 

     // what to do here? 

     } 
} 

Antwort

3

Ich nehme an, Sie mehrere centrals in AppDelegate im "Reinstantiate Your Central and Peripheral Managers" section of the documentation wie beschrieben wiederherstellen wollen, sind?

Wenn ja, könnte ich die didFinishLaunchingWithOptions sehen etwas wie folgt aussehen:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.referencesToCentrals = [NSMutableArray array]; 

    NSArray *centralManagerIdentifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey]; 
    if ((centralManagerIdentifiers) && (centralManagerIdentifiers.count > 0)) { 
     // The system knows about one or more centrals that need to be restored. 
     for (NSString *identifier in centralManagerIdentifiers) { 
      CBCentralManager *manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:@{CBPeripheralManagerOptionRestoreIdentifierKey : identifier}]; 
      [self.referencesToCentrals addObject:manager]; 
     } 
    } 
    else { 
     // No centrals need to be restored. If desired, create one for use and save a reference like this: 
     CBCentralManager *manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:@{CBPeripheralManagerOptionRestoreIdentifierKey : [[NSUUID UUID] UUIDString]}]; 
     [self.referencesToCentrals addObject:manager]; 
    } 

    // Set up window, etc... 
    return YES; 
} 

Sie werden vielleicht nicht einen Verweis auf alle Ihre centrals im AppDelegate behalten möchten, wie ich in diesem Beispiel mache noch notwendigerweise Lassen Sie Ihren App-Delegierten als CBCentralManagerDelegate des Central fungieren, aber Sie erhalten die Idee ...

+0

Ich sehe Sie initialisieren centralmanager in der App Delegat, aber was ifcentral Manager ist in der anderen Klasse? Ich habe SharedManager für den zentralen Manager. – Paragon

+0

Indem Sie den Delegaten bei der Initialisierung auf "self" setzen, implizieren Sie, dass AppDelegate der Delegat ist. Ist das richtig? – vikzilla

Verwandte Themen