0

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

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

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

但我也想在同一个更新中保存一个位置的坐标,也就是不必做 2 个单独的调用。我已经查看了这个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
        }];
}
4

1 回答 1

0

如果您将字典更新为:

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

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

于 2016-04-10T20:33:23.540 回答