我需要一种分类GPS信号强度的方法.到目前为止,我遇到过(Class Reference)的horizontalAccuracy属性.CLLocation
更具体地说,我需要创建类似下面的内容; 我所遇到的问题是填写if声明.
if (someLocation.horizontalAccuracy ...)
{
// No Signal
}
else if (someLocation.horizontalAccuracy ...)
{
// Poor Signal
}
else if (someLocation.horizontalAccuracy ...)
{
// Average Signal
}
else if (someLocation.horizontalAccuracy ...)
{
// Good Signal
}
else
{
// Excellent Signal
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我吗?
委托方法基本上是一半的时间
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
Run Code Online (Sandbox Code Playgroud)
完全没有被召唤.但另一半时间它完美运作!我发现它通常发生在我关闭并退出它之后第一次启动Xcode时,但之后在那之后或者几次运行之后它似乎工作正常.我不是100%肯定,如果它只是一个Xcode问题或什么,我很快就会得到开发人员的许可证,所以我会看看它是否能在实际设备上正常工作.
从viewDidAppear开始(在viewDidLoad中尝试也没有区别),我运行一个方法来初始化我的locationManager东西:
locationManager = [[CLLocationManager alloc]init];
[locationManager setDelegate:self];
locationManager.distanceFilter = 20.0f;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.pausesLocationUpdatesAutomatically = NO;
if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
[locationManager requestAlwaysAuthorization];
[locationManager startUpdatingLocation];
Run Code Online (Sandbox Code Playgroud)
有时候这种方法有效,有时则不然.我甚至做了一个计时器,每隔一秒钟就重新运行一次,但这不起作用.
还有什么我应该做的吗?这个问题有什么答案吗?
谢谢.
如何获取当前位置的经纬度.
我试过这个.使用Xcode 6.01和IOS SDK 8.0
-(CLLocationCoordinate2D) getLocation{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
CLLocation *location = [locationManager location];
CLLocationCoordinate2D coordinate = [location coordinate];
return coordinate;
}
- (void)getCurrentLocation{
CLLocationCoordinate2D coordinate = [self getLocation];
NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];
NSLog(@"Latitude = %@", latitude);
NSLog(@"Longitude = %@", longitude);
}
- (void)viewDidLoad{
[super viewDidLoad];
[self getCurrentLocation];
}
Run Code Online (Sandbox Code Playgroud)
在这里,我将模拟器位置启用到Deployment 8.0 iPhone模拟器4s.即使在设备上也无法正常工作.
@ALL请告诉我,我在这里做错了什么.
core-location cllocationmanager cllocation currentlocation ios8
我想允许用户搜索街道名称并将结果显示在UITableView中.目前该地区并不重要,它可以来自任何地区.
我在搜索中找不到任何相关示例,我不知道是否应该使用CLLocation或MKLocalSearch.
根据文档,我应该使用MKLocalSearch:
虽然本地搜索和地理编码类似,但它们支持不同的用例.如果要在地图坐标和结构化地址(例如地址簿地址)之间进行转换,请使用地理编码.如果要查找与用户输入匹配的一组位置,请使用本地搜索.
但我尝试了两种方法,它只给了我一个结果(即使 - 虽然有一个NSArray返回.
这是CLGeocoder方法:
CLGeocoder *geocoding = [[CLGeocoder alloc] init];
[geocoding geocodeAddressString:theTextField.text completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSLog(@"%i", [placemarks count]);
for(CLPlacemark *myStr in placemarks) {
NSLog(@"%@", myStr);
}
}
}];
Run Code Online (Sandbox Code Playgroud)
这是我的MKLocalSearch尝试:
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = theTextField.text;
request.region = self.region;
localSearch = [[MKLocalSearch alloc] initWithRequest:request];
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){
if (error != nil) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Map Error",nil)
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show]; …Run Code Online (Sandbox Code Playgroud) 我正在iphone sdk4.0上创建一个应用程序.在那里,确实没有调用更新位置方法.我在下面给出了我的代码.请帮助.谢谢.
-(id)init
{
[super init];
obj=[[UIApplication sharedApplication]delegate];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
//locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
return self;
}
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSLog(@"%f",newLocation.coordinate.latitude);
NSLog(@"%f",newLocation.coordinate.longitude);
obj=[[UIApplication sharedApplication]delegate];
location=[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude];
obj.lattitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.latitude];
obj.longitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude];
//location=[[CLLocation alloc]initWithLatitude:39.9883 longitude:-75.262227];
}
Run Code Online (Sandbox Code Playgroud) 我知道如何找到我手机当前所在位置的真实航向/磁航向,但是有可能找到远程位置的磁偏差/磁偏角吗?
我想做的是能够将一个销钉放在地图上的某个位置,并从该点找到具有磁性变化的真实轴承和轴承.
谢谢!
我正在尝试构建一个应用程序来构建和保存类似于map run的路由.我用面包屑示例代码,特别是CrumbPath和CrumbPathView我的路线的基础上,从苹果.两个问题:
如果我尝试访问类似的MKMapPoint *points对象,CrumbPath那么:
[_route lockForReading];
NSLog(@"%@", _route.points);
NSLog(@"%d", _route.pointCount);
[_route unlockForReading];
Run Code Online (Sandbox Code Playgroud)
我的应用程序崩溃,说:
Thread 1: EXC_BAD_ACCESS (code: 1, address: 0x9450342d)
Run Code Online (Sandbox Code Playgroud)
我很难理解,因为在CrumbPath.m文件中,苹果的人通过显式获取写锁定然后解锁它来写入"数组",但是如果我获取了读锁并试图从中读取它,那么崩溃.
我尝试访问的原因points是尝试获取MKMapPoints,将它们转换为CLLocationCoordinate2D对象,并保存它们,以便我可以polyline根据用户的请求重绘.由于我无法访问points,我尝试保存我发送到数组中的CLLocationCoordinate2D对象以上传到我的Parse后端,但我总是收到错误说:locationManager_route
Sending 'CLLocationCoordinate2D' to parameter of incompatible type 'id'
Run Code Online (Sandbox Code Playgroud)
这并没有使这更容易.有没有人知道为什么我会收到这些错误?
位置经理代表
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
if (_userLocation.longitude != manager.location.coordinate.longitude
&& _userLocation.latitude != manager.location.coordinate.latitude) {
_userLocation = manager.location.coordinate;
}
if (_isRecording) …Run Code Online (Sandbox Code Playgroud) 有人可以帮我将以下Objective-C语句转换为Swift吗?
CLLocationDistance distance = [fromLocation distanceFromLocation:toLocation];
Run Code Online (Sandbox Code Playgroud)
我知道这样做一定很简单.我是iOS编程的全新,任何帮助将不胜感激.
谢谢!:-)
更新:这不是一个重复.我已经在info.plist中添加了所需的密钥,如我原始问题中所述,问题仍然存在.我已经尝试了各种组合的所有三个键.
在任何人感到不安之前,我已阅读了许多Apple Dev论坛帖子和堆栈溢出帖子,无法弄清楚为什么我的应用程序拒绝提示用户允许使用时授权.
我已将以下密钥添加到我的Info.plist文件中,并附带一个String值:
NSLocationWhenInUseUsageDescription
Run Code Online (Sandbox Code Playgroud)
然后我写了(在Swift和Obj-C中)应该提示用户的代码:
@property CLLocationManager *location;
...
@synthesize location;
...
location = [[CLLocationManager alloc] init];
location.delegate = self;
location.desiredAccuracy = kCLLocationAccuracyBest;
location.distanceFilter = kCLDistanceFilterNone;
[location requestWhenInUseAuthorization];
[location startUpdatingLocation];
I'm using the following CLLocationManagerDelegate methods.
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
- (void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
Run Code Online (Sandbox Code Playgroud)
这基本上是直接从Apple"LocateMe"示例代码中复制的.
无论我尝试什么样的各种序列或细微的变化,应用程序都不会提示允许授权.我已经使用switch语句来确定状态[CLLocationManager authorizationStatus],但不断收到"未确定"的响应.
if ([CLLocationManager locationServicesEnabled]) {
switch ([CLLocationManager authorizationStatus]) {
case kCLAuthorizationStatusAuthorizedAlways:
NSLog(@"Always Authorized");
break;
case kCLAuthorizationStatusDenied:
NSLog(@"Denied");
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
NSLog(@"Authorized in Use");
break;
case …Run Code Online (Sandbox Code Playgroud) 尝试使用swiftUI获取当前位置。下面的代码无法使用didUpdateLocations委托初始化。
class GetLocation : BindableObject {
var didChange = PassthroughSubject<GetLocation,Never>()
var location : CLLocation {
didSet {
didChange.send(self)
}
}
init() {}
}
Run Code Online (Sandbox Code Playgroud)