2017-07-02 1 views
0

J'essaie d'enregistrer des données dans la base de données Ream alors que les utilisateurs ont verrouillé leur iPhone. Ces données peuvent être les coordonnées de localisation produites par les mises à jour d'emplacement d'arrière-plan. Si le royaume ne peut pas le faire. Les données de base pourraient-elles le faire?Will Realm pourra-t-il toujours enregistrer les données alors que l'utilisateur a verrouillé l'iPhone?

Voilà comment je le fais dans le code:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations { 
    NSLog(@"didUpdateLocations: %@", locations); 

    if (locations.count > 0) { 
     CLLocation *location = locations.firstObject; 

     if (location.horizontalAccuracy < 0) { 
      return; 
     } 

     JBLocation *locationObject = [[JBLocation alloc] init]; 
     locationObject.lat = location.coordinate.latitude; 
     locationObject.lon = location.coordinate.longitude; 
     locationObject.date = [NSDate new]; 
     locationObject.speed = location.speed; 

     RLMRealm *realm = [RLMRealm defaultRealm]; 
     [realm beginWriteTransaction]; 
     [realm addObject:locationObject]; 
     [realm commitWriteTransaction]; 
    } 
} 

Répondre

0

Faire quelque chose pendant que le téléphone est verrouillé est un exemple d'une tâche d'arrière-plan. Même si je ne suis pas sûr que vous réussirez à faire une tâche en arrière-plan, même pour une fois, mais il est certain que lorsque le système d'exploitation tue votre application, il ne peut plus faire ce que vous voulez faire.

Je fais dans un projet qui est similaire au vôtre (récupération de l'emplacement d'arrière-plan, enregistrement dans la base de données locale, publication sur le serveur pendant que l'écran est verrouillé). Il a également été soumis (approuvé) à l'Apple en tant que bêta.

J'ai utilisé cet exemple de projet comme une bibliothèque et à Swift porté:

https://github.com/voyage11/Location