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

Related posts about iphone

Related posts about objective-c