Sunday, April 3, 2011

iPhone 3.0 Compass: how to get a heading?

I'm relatively new to Objective-C and really don't know much about it yet, so I apologise for what is probably a really amateurish question.

I'm trying to get the magnetic heading from CLHeading and CLLocationDirection. However I'm getting compile errors for this line of code:

locationLabel.text = [[[location course] magneticHeading] stringValue];

The errors are:
warning: invalid receiver type 'CLLocationDirection'
error: cannot convert to a pointer type

I don't really understand what I'm doing wrong here. Please help!

From stackoverflow
  • How are you allocating and initializing location? Make sure location is defined as a (CLLocationDirection *) and not just a (CLLocationDirection).

  • Here are the steps needed to use the compass.

    1) check the availability: if the headingAvailable property of the location manager is YES, then you can use the compass.

    2) use the location manager method -(void) startUpdatingHeading to begin receiving the information you are searching for

    3) actually retrieve this information using the delegate method (do not forget to set yourself as the delegate)

     - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
    

    Hope this helps.

  • magneticHeading is of CLLocationDirection type, which is simply a typedef for the primitive data type "double". In your example you are trying to send a message to something that is not an object ! You should simply format the double like so:

    locationLabel.text = [NSString stringWithFormat:@"Heading %.3f", [[location course] magneticHeading]];

    Sean R : Thanks, this was where I was getting really confused. I need to learn more about typedefs I guess.
  • Hi,

    Can you help me. Do you have semple about compass?

    Im begim in C and iPhone.

    Thanks..

    Raul

    Marcelo Cantos : This isn't an answer.

0 comments:

Post a Comment