GeoFire 在同一通话中更新

GeoFire update in same call

我正在像这样创建一个 Firebase 更新字典

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

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

但我还想在同一更新中保存某个位置的坐标,也就是不必执行 2 个单独的调用。我查看了 this Github 页面,但我不知道如何做这样的事情

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

在与我的第一个示例相同的更新中?

是否有更好的方法来执行此操作,还是我需要自己制作一些东西?例如,像任何其他变量一样更改库或将 CLLocation 设置为更新?像这样:

-(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
    }];
}

编辑

这里有一段代码与我的项目中的非常相似:

-(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:@"/users/%@/", userId] : locationDetails
                            };

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

如果您将词典更新为:

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

您还将设置节点的优先级,这是(afaik)GeoFire 所需要的。