2016-04-08 3 views
0

Ich bin ein Update Wörterbuch Firebase zu schaffen wie soGeoFire Update in gleichen Anruf

NSDictionary *update = @{ 
         key1 : value1, 
         key2 : value 2, 
         key3 : value 3 
         }; 

[baseRef updateChildValues:update withCompletionBlock:^(NSError *error, Firebase *ref) { 
      // complete 
     }]; 

Aber ich würde auch die Koordinaten einer Stelle innerhalb der gleichen Update speichern möchte, auch bekannt als nicht separate 2 zu tun hat Anrufe. Ich habe einen Blick auf this Github Seite genommen, aber ich kann nicht herausfinden, wie so etwas wie diese

[geoFire setLocation:[[CLLocation alloc] initWithLatitude:37.7853889 longitude:-122.4056973] 
      forKey:@"firebase-hq"]; 

in der gleichen Update wie mein erstes Beispiel zu tun?

Gibt es einen bevorzugten Weg, oder muss ich etwas selbst machen? ZB ändern Sie die Bibliothek oder setzen Sie eine CLLocation auf das Update als jede andere Variable? Etwas wie folgt aus:

-(void)setLocation:(CLLocation *)location forRef:(Firebase *)ref 
{ 
    NSNumber *lat = [NSNumber numberWithDouble:location.coordinate.latitude]; 
    NSNumber *lng = [NSNumber numberWithDouble:location.coordinate.longitude]; 
    NSDictionary *update = @{ @"location" : @[ lat, lng ] }; 

    [ref setValue:update withCompletionBlock:^(NSError *error, Firebase *ref) { 
     // complete 
    }]; 
} 

bearbeiten

hier ist ein Stück Code, das in meinem Projekt, dass es sehr ähnlich ist:

-(void)uploadUserId:(NSString *)userId withPlace:(GMSPlace *)place 
{ 
    Firebase *ref = [[Firebase alloc] initWithUrl:baseRefUrl]; 

    NSNumber *lat = [NSNumber numberWithDouble:place.coordinate.latitude]; 
    NSNumber *lng = [NSNumber numberWithDouble:place.coordinate.longitude]; 
    NSString *geoHash = [GFGeoHash newWithLocation:place.coordinate].geoHashValue; 

    NSDictionary *locationDetails = @{ @"l" : @[ lat, lng ], @"g" : geoHash}; 

    NSDictionary *update = @{ 
           [NSString stringWithFormat:@"https://stackoverflow.com/users/%@/", userId] : locationDetails 
          }; 

    [ref updateChildValues:update withCompletionBlock:^(NSError *error, Firebase *ref) { 
      // complete 
     }]; 
} 
+0

Es gibt keine Möglichkeit, den GeoFire-Standort und das Objekt selbst in einem einzigen Aufruf zu aktualisieren. Es könnte wahrscheinlich mit einem einzigen [Update für mehrere Standorte] (https://www.firebase.com/blog/2015-09-24-atomic-writes-and-more.html), aber keiner der GeoFire-Bibliotheken getan werden Verwenden Sie diese Funktion derzeit. –

+0

@FrankvanPuffelen Ich sehe, könnte ich vielleicht meinen Beispielcode verwenden und lieber GeoFire für Abfragen verwenden? – Erik

+0

Sicher. Das sollte funktionieren, solange Sie sicherstellen, dass Sie [dieselben Eigenschaften/Prioritäten wie GeoFire festlegen] (https://github.com/firebase/geofire-objc/blob/master/GeoFire/Implementation/GeoFire.m#L83- L108). –

Antwort

0

Wenn Sie Ihr Wörterbuch aktualisieren, um:

NSDictionary *locationDetails = @{ 
     @"l" : @[ lat, lng ], 
     @"g" : geoHash, 
     @".priority": geoHash 
    }; 

Sie werden auch die Priorität der Nicken setzen e, welches (afaik) für GeoFire benötigt wird.

+0

Ich aktualisiere meine Firebase ref mit diesen Informationen jetzt, aber Ihre Antwort in [diese Frage] (http://stackoverflow.com/questions/35301799/ geofire-query-on-user-location) besagt, dass ich die standortbezogenen Informationen vom Standort selbst trennen soll? – Erik

+0

** Edit **: Ich sehe, dass ich mein Multi-Location-Update noch verwenden kann, aber ich muss den Ort an einen anderen Ort als die eigentlichen relevanten Daten schreiben? – Erik

Verwandte Themen