Я новый в мире Objective-C. Я пытаюсь разработать приложение для простого определения местоположения на iOS 6.1 на симуляторе. Но когда я пытаюсь имитировать местоположение, он вообще не работает. Я не получаю никакого события, но delegate
объект зарегистрирован должным образом и PositionProvider
- startUpdate
.CLLocationManager не получает обновлений
Что не так?
я следующий код:
PositionProvider
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import "LocationListener.h"
@interface PositionProvider : NSObject
{
@public
LocationListener<CLLocationManagerDelegate> *listener;
@protected
CLLocationManager *manager;
}
#pragma mark -
#pragma mark on/off
-(void) startUpdate;
-(void) stopUpdate;
@end
Реализация
@implementation PositionProvider
{
@private
CLLocation *lastLocation;
}
-(void) startUpdate{
manager = [[CLLocationManager alloc] init];
LocationListener *listener2 = [[LocationListener alloc]init];
manager.delegate = listener2;
manager.desiredAccuracy = kCLLocationAccuracyBest;
if(manager == nil)
NSLog(@"Manager is NULL");
if(listener == nil || manager.delegate == nil)
NSLog(@"Listener is NULL");
NSLog(@"startUpdate");
if ([CLLocationManager locationServicesEnabled]) {
NSLog(@"Location Services Enabled");
switch ([CLLocationManager authorizationStatus]) {
case kCLAuthorizationStatusAuthorized:
NSLog(@"We have access to location services");
break;
case kCLAuthorizationStatusDenied:
NSLog(@"Location services denied by user");
break;
case kCLAuthorizationStatusRestricted:
NSLog(@"Parental controls restrict location services");
break;
case kCLAuthorizationStatusNotDetermined:
NSLog(@"Unable to determine, possibly not available");
break;
default:
break;
}
}
else {
NSLog(@"Location Services Are Disabled");
}
[manager startUpdatingHeading];
[manager startUpdatingLocation];
}
-(void) stopUpdate{
}
@end
LocationListener
@interface LocationListener : NSObject<CLLocationManagerDelegate>
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;
@end
Реализация
@implementation LocationListener
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
// newLocation.coordinate;
NSLog(@"Logging Location");
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
NSLog(@"Logging Location");
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus) status{
NSLog(@"Status");
}
@end
Почему он есть переменная с именем Listener2 и другие (Ивар) с именем слушателя? – tdelepine
@tdelepine Он был изменен только в целях отладки. Но это все еще не работает. – user902691
Используете ли вы сеть Wi-Fi, иногда неправильное местоположение пользователя? В этом случае необходимо зайти в меню симулятора и установить больше раз местоположение – tdelepine