Я создаю Firebase словарь обновление как такобновления GeoFire в одном вызове
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:@"https://stackoverflow.com/users/%@/", userId] : locationDetails
};
[ref updateChildValues:update withCompletionBlock:^(NSError *error, Firebase *ref) {
// complete
}];
}
Невозможно одновременно обновить местоположение GeoFire и сам объект в одном вызове. Вероятно, это можно сделать с помощью одного [обновления нескольких местоположений] (https://www.firebase.com/blog/2015-09-24-atomic-writes-and-more.html), но ни одна из библиотек GeoFire в настоящее время используют эту функцию. –
@FrankvanPuffelen Я вижу, могу ли я использовать свой пример кода и скорее использовать GeoFire для запросов? – Erik
Несомненно. Это должно работать до тех пор, пока вы убедитесь, что вы [устанавливаете те же свойства/приоритеты, что и GeoFire] (https://github.com/firebase/geofire-objc/blob/master/GeoFire/Implementation/GeoFire.m#L83- L108). –