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 所需要的。
我正在像这样创建一个 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 所需要的。