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
}];
}
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. –
@FrankvanPuffelen Ich sehe, könnte ich vielleicht meinen Beispielcode verwenden und lieber GeoFire für Abfragen verwenden? – Erik
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). –