【问题标题】:Updating location iPhone App更新位置 iPhone App
【发布时间】:2011-11-12 19:08:53
【问题描述】:

我正在尝试让应用在用户移动时更新用户的位置,并根据他的位置更新 POI。它现在不起作用(即使他移动了很多,用户的位置也保持不变)。谁能帮帮我?

- (void)viewDidLoad {

    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    locationManager.distanceFilter = 1000;
    [mapView removeAnnotations: mapView.annotations];
[locationManager startUpdatingLocation];


}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    homeCoordinate = newLocation.coordinate;
    if (!home1Annotation) {
        home1Annotation = [[MyMapAnnotation alloc] initWithCoordinate:homeCoordinate
                                                               title:@"Current Location"
                          ];
        [mapView addAnnotation:home1Annotation];
        [self adjustMapZoom];
        [self loadAndSortPOIs];
        for (int j =0 ; j <5 ; j++){
            [self displayPOIs];
        }
    }
}

我的地图注释

#import "MyMapAnnotation.h"


@implementation MyMapAnnotation
@synthesize coordinate;
#pragma mark initializers

// designated initializer
-(id) initWithCoordinate:(CLLocationCoordinate2D)coordinateQ title:(NSString*) titleQ {
    if ( self = [super init]) {
        coordinate = coordinateQ;
        title = titleQ;

        [title retain];
    }
    return self;
}

-(void) dealloc {
    [title release];
    [super dealloc];
}

#pragma mark MKAnnotation implementation

-(NSString*) title { return title; }

-(NSString*) subtitle { return nil; }



@end

【问题讨论】:

    标签: iphone objective-c ios ios4 core-location


    【解决方案1】:

    有两个问题:

    1) 要求最高精度:kCLLocationAccuracyBest 而不是 kCLLocationAccuracyHundredMeters。不要设置distanceFilter 或将其设置为零。

    2) 在didUpdateToLocation,添加一行

    NSLog(@"Location update: %@",newLocation);
    

    并观察日志文件输出。您的if 语句使下面的代码块只运行一次。我希望有一个 else 块,如果 home1Annotation 已经存在,它将更新 POI 位置。比如:

    } else {
         [MyMapAnnotation setCoordinate:homeCoordinate];
    }
    

    (但我不知道你的班级MyMapAnnotation所以这是猜测)

    【讨论】:

    • 感谢您的帮助... 1) 已更正,但我不确定 2) 是否正确...您可以编辑我的问题中给出的代码以帮助我更好地理解吗?
    • 如果您需要任何帮助,您必须分享MyMapAnnotation
    • 我应该在此代码之后添加NSLog(@"Location update: %@",newLocation); - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { homeCoordinate = newLocation.coordinate; 然后在for (int j =0 ; j &lt;5 ; j++){ [self displayPOIs]; } 之后我应该添加} else { [MyMapAnnotation setCoordinate:homeCoordinate]; } 对吗?
    • 应用程序在 3 秒后崩溃。XCode 告诉我 MapAnnotation 可能不会响应 setCoordinate。
    【解决方案2】:

    不应该有任何问题,一切都会正常工作,但在您的情况下,当用户从最近检测到的 1 公里距离上拐杖时,将调用关于用户位置更改的下一个调用,正如您在此代码 @987654321 中指定的那样@

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      相关资源
      最近更新 更多