Get CoreLocation Update before TableView population?
Posted
by Clemens
on Stack Overflow
See other posts from Stack Overflow
or by Clemens
Published on 2010-06-07T10:48:18Z
Indexed on
2010/06/07
10:52 UTC
Read the original article
Hit count: 402
hi,
i have the corelocation stuff in an uitableview controller. i actually want to get a distance from two locations and print that distance in a tableview cell.
the problem is, that the tableview is filled before all the corelocation stuff happens. how can i make corelocation makes all updates before the table is filled?
heres my class:
//
// EntriesListViewController.m // OEAW_App // // Created by Clemens on 6/6/10. // Copyright 2010 MyCompanyName. All rights reserved. //
import "EntriesListViewController.h"
import "EntryDetailController.h"
@implementation EntriesListViewController
@synthesize locationManager; @synthesize delegate;
NSMutableDictionary *entries; NSMutableDictionary *dictionary;
CLLocation *coords;
/- (id) init { self = [super init]; if (self != nil) { self.locationManager = [[[CLLocationManager alloc] init] autorelease]; self.locationManager.delegate = self; } return self; }/
(CLLocationManager *)locationManager {
if (locationManager != nil) { return locationManager; }
locationManager = [[CLLocationManager alloc] init]; locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; locationManager.delegate = self;
return locationManager; }
(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { //coords.longitude = newLocation.coordinate.longitude; //coords.latitude = newLocation.coordinate.latitude; coords = newLocation; NSLog(@"Location: %@", [newLocation description]); }
(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"Error: %@", [error description]); }
(void)viewDidLoad {
//[[MyCLController alloc] init]; //[locationManager startUpdatingLocation];
[[self locationManager] startUpdatingLocation];
//---initialize the array--- //entries = [[NSMutableArray alloc] init];
//---add items--- //NSString *Path = [[NSBundle mainBundle] bundlePath]; //NSString *DataPath = [Path stringByAppendingPathComponent:@"Memorials.plist"];
dictionary = [[NSDictionary alloc] initWithContentsOfURL:[NSURL URLWithString: @"http://akm.madison.at/memorials.xml"]];
/*NSDictionary *dssItem = [dictionary objectForKey:@"1"]; NSString *text = [dssItem objectForKey:@"text"]; */
//entries = [[NSMutableDictionary alloc] init];
NSLog(@"%@", dictionary);
//Path get the path to MyTestList.plist NSString *path=[[NSBundle mainBundle] pathForResource:@"Memorials" ofType:@"plist"]; //Next create the dictionary from the contents of the file. NSDictionary *dict=[NSDictionary dictionaryWithContentsOfFile:path];
//now we can use the items in the file. // self.name.text = [dict valueForKey:@"Name"] ; NSLog(@"%@",[dict valueForKey:@"Name"]);
//---set the title--- self.navigationItem.title = @"Türkendenkmäler";
[super viewDidLoad];
}(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; }
(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [dictionary count]; }
// Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
NSArray *keys = [dictionary allKeys];
id key = [keys objectAtIndex:indexPath.row];
NSDictionary *tmp = [dictionary objectForKey:key];
NSString *name = [tmp objectForKey:@"name"];
cell.textLabel.text = name;
cell.font = [UIFont fontWithName:@"Helvetica" size:12.0];
CLLocation *location = [[CLLocation alloc] initWithLatitude:[[tmp valueForKey:@"coords_x"] floatValue]
longitude:[[tmp valueForKey:@"coords_y"] floatValue]];
/*CLLocation *newLoc = [[CLLocation alloc] initWithLatitude:coords.latitude
longitude:coords.longitude];*/
//locationController = [[MyCLController alloc] init];
int distance = [coords distanceFromLocation:location];
NSLog(@"%@",distance);
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@m",distance];
//NSLog(@"%@", [getLocation newLoc]);
return cell;
}
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
EntryDetailController *detailViewController = [[EntryDetailController alloc] initWithNibName:@"EntryDetailController" bundle:nil];
//detailViewController.entrySelected = [dictionary objectAtIndex:indexPath.row];
NSArray *keys = [dictionary allKeys]; id key = [keys objectAtIndex:indexPath.row]; NSDictionary *tmp = [dictionary objectForKey:key]; NSString *name = [tmp objectForKey:@"name"]; detailViewController.entrySelected_name = name;
NSString *location = [tmp objectForKey:@"location"]; detailViewController.entrySelected_location = location;
NSString *type = [tmp objectForKey:@"type"]; detailViewController.entrySelected_type = type;
NSString *slug = [tmp objectForKey:@"slug"]; detailViewController.entrySelected_slug = slug;
[self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release]; }
(void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; }
(void)dealloc { [entries release]; [super dealloc]; }
@end
© Stack Overflow or respective owner