As explained in the main graph view usage document, the basic implementation of setting up a graph view assigns static data on the graph's series items. If using data from the Aeris Weather API, this process requires that you handle loading data before setting the graph's series data.
However, you can setup your graph view to automatically handle requesting and setting data from the Aeris Weather API without needing to perform the requests or data setup yourself. Just use the
AWFWeatherGraphSeries classes instead when configuring your graph. When using this method, you must provide the
AWFWeatherEndpoint instance you want to use for a specific series item, which is what will perform the request for that series item's data:
AWFObservationsArchive *endpoint = [AWFObservationsArchive new]; endpoint.options.place = [AWFPlace placeWithCity:@"seattle" state:@"wa" country:@"us"]; endpoint.options.fromDateString = @"-24hours";
let endpoint = AWFObservationsArchive() endpoint.options?.place = AWFPlace(city: "seattle", state: "wa", country: "us") endpoint.options?.fromDateString = "-24hours"
Then setup the series item using
AWFWeatherSeriesItem instead of
AWFSeriesItem and associate it with the endpoint instance by setting the
AWFWeatherSeriesItem *tempItem = [AWFWeatherSeriesItem new]; tempItem.title = NSLocalizedString(@"Temperature", nil); tempItem.endpoint = endpoint; tempItem.xAxisPropertyName = @"periods.#.timestamp"; tempItem.yAxisPropertyName = @"periods.#.tempF";
let tempItem = AWFWeatherSeriesItem() tempItem.title = "Temperature" tempItem.endpoint = endpoint tempItem.xAxisPropertyName = "periods.#.timestamp" tempItem.yAxisPropertyName = "periods.#.tempF"
Note that in the above example, we prefix the model value's key path with
periods.#. This is because the
AWFObservationsArchive endpoint returns an
AWFObservationArchive instance whose
periods property contains the array of
AWFObservation instances for the range. If a property on an
AWFWeatherObject is an array but you need to reference a property on each item within that array for your series, you can use a hash (#) symbol before the sub-object’s key path. This will tell the graph to use the key path property values for each point in the series.
You can also use the same endpoint instance for multiple series items, which is useful for graphing different values from the same weather model object. The following example reuses the same
AWFObservationsArchive instance from above but for the series item plotting wind speed values instead of temperature:
AWFWeatherSeriesItem *windItem = [AWFWeatherSeriesItem new]; windItem.endpoint = endpoint; windItem.xAxisPropertyName = @"periods.#.timestamp"; windItem.yAxisPropertyName = @"periods.#.windSpeedMPH";
let windItem = AWFWeatherSeriesItem() windItem.endpoint = endpoint windItem.xAxisPropertyName = "periods.#.timestamp" windItem.yAxisPropertyName = "periods.#.windSpeedMPH"
Since you're not providing static data for your graph series, you'll need to tell the graph view to load the required data for each of your series items. So just call
reloadData on your graph view when you're ready to load or reload the graph's data: