我已将我的更新iOS SDK
到版本 6。之后我编译了我的应用程序(在 中运行良好iOS 4 & iOS 5
),但现在位置服务不起作用。我delegate
没有收到任何更新,上方的位置箭头也没有出现......我正在像往常一样启动服务:
[locationManager startUpdatingLocation];
我的项目是非 ARC。
怎么了?这真让我抓狂...
提前致谢。
我已将我的更新iOS SDK
到版本 6。之后我编译了我的应用程序(在 中运行良好iOS 4 & iOS 5
),但现在位置服务不起作用。我delegate
没有收到任何更新,上方的位置箭头也没有出现......我正在像往常一样启动服务:
[locationManager startUpdatingLocation];
我的项目是非 ARC。
怎么了?这真让我抓狂...
提前致谢。
只需将pausesLocationUpdatesAutomatically
Location Manager 的属性设置为NO
。这是 IOS 6 的一项新功能,可在应用程序在后台运行时禁用位置更新。此属性的默认值为YES
。
确保项目的 .plist 文件中有 CFBundleDisplayName。添加该密钥为我修复了它。
这是iOS6中的一个变化:
您需要实现locationManager:didUpdateLocations:而不是 locationManager:didUpdateToLocation:fromLocation 以便在位置更新时得到通知。
您还应该阅读有关startUpdatingLocation的文档。
就我而言,我的位置管理器属于不同的类,我从主控制器调用这个类。这不起作用,并且没有调用 didUpdateLocations。
//
// LocationServices.h
//
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
@interface LocationServices : NSObject <CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
@property (nonatomic, retain) CLLocationManager *locationManager;
- (void)startLocationServices;
@end
// LocationServices.m
#import "LocationServices.h"
@implementation LocationServices
@synthesize locationManager, currentLocation;
- (void)startLocationServices {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.pausesLocationUpdatesAutomatically = NO;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
if ([CLLocationManager locationServicesEnabled]) {
[locationManager startUpdatingLocation];
} else {
NSLog(@"Location services is not enabled");
}
}
////////////////////////////////////////////////
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
CLLocation* location = [locations lastObject];
NSLog(@"Updated: latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
}
@end
// Main controller
- (void)viewDidLoad {
[super viewDidLoad];
.....
LocationServices *locationSerices = [[LocationServices alloc]init];
[locationSerices startLocationServices];
......
}
上面的代码不起作用。为什么?我不知道……当你花这么多时间试图做一件本应简单的事情时,你很容易失去兴趣。iOS 是一个非常复杂且不友好的编程环境。做一件事有很多方法,只有一种有效,你不能混合搭配而不引入问题。您必须按照书本做所有事情,否则您将一无所获。甚至没有暗示你做错了什么......令人沮丧......
相反,当我在主控制器中实现 locationManager:(CLLocationManager *)manager didUpdateLocations: 时一切正常
该问题似乎在 IOS 6.1 Beta2 中得到解决 - http://www.youtube.com/watch?v=aFZR0eMUV74
设置 CFBundleDisplayName 为我解决了这个问题。从未调用过相同的位置更新,只需设置 info.plist 参数即可开始工作。
我已经尝试了 plist 文件中的所有内容、清理、重建、新目标、配置等,等等。没有任何效果。但最后我已经修好了。我必须从头开始创建一个新的 Xcode 4.5 项目,重新配置它,逐个文件和逐个框架地手动添加框架。似乎我的旧 XCode 项目在内部与上一个 XCode 不兼容。我在这里写这个是因为也许它可以节省某人接下来 10 个小时的工作。
我在这里是不是太简单了?在隐私下,位置看起来和以前的问题一样。有什么大惊小怪的?