Вы можете проверить ниже метод, который я сделал для получения текущего местоположения.
void _currentLocation() async {
Location _location = new Location();
Map<String, double> location;
try {
location = await _location.getLocation();
} on PlatformException catch (e) {
print(e.message);
location = null;
}
mapController.animateCamera(CameraUpdate.newCameraPosition(
CameraPosition(
bearing: 0,
target: LatLng(location["latitude"], location["longitude"]),
zoom: 17.0,
),
));
mapController.addMarker(
MarkerOptions(
position: LatLng(location["latitude"], location["longitude"]),
),
);
}
Я не верю к - много отношений поддерживаются для автоматического KVO propogation. В документации не говорится, что explicity так или иначе, но от того, что я знаю KVO в целом, наблюдая подразделы к - многие отношения, имеет тенденцию быть нетривиальным.
Путем я приблизился бы, это должно будет вручную наблюдать cost
свойство каждого объекта InvoiceLineItem, путем реализации к - много средств доступа KVC для lineItems
свойство на классе Счета, выполняющем в addObserver/removeObserver, называет вставить/удалить методы, соответственно, и затем инициировало totalCost
изменитесь вручную использующий willChangeValueForKey:/didChangeValueForKey:. Так что-то вроде этого (примерно коротко изложенный код, правовые оговорки и т.д.):
- (void)insertObject:(InvoiceLineItem*)newItem inLineItemsAtIndex:(unsigned)index
{
[newItem addObserver:newItem forKeyPath:@"cost" options:0 context:kLineItemContext];
[lineItems insertObject:newItem atIndex:index];
}
- (void)removeObjectFromLineItemsAtIndex:(unsigned)index
{
[[lineItems objectAtIndex:index] removeObserver:self forKeyPath:@"cost"];
[lineItems removeObjectAtIndex:index];
}
- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context
{
if (context == kLineItemContext)
{
[self willChangeValueForKey:@"totalCost"];
[self didChangeValueForKey:@"totalCost"];
}
}
Вы можете попробовать более короткое решение.
Добавить в файл заголовка:
@property (retain, readonly) NSDecimalNumber *accountBalance;
Добавить в файл реализации
- (NSDecimalNumber *)totalCost
{
return [self valueForKeyPath:@"InvoiceLineItems.@sum.cost"];
}