7

我已将我的更新iOS SDK到版本 6。之后我编译了我的应用程序(在 中运行良好iOS 4 & iOS 5),但现在位置服务不起作用。我delegate没有收到任何更新,上方的位置箭头也没有出现......我正在像往常一样启动服务:

[locationManager startUpdatingLocation];

我的项目是非 ARC。

怎么了?这真让我抓狂...

提前致谢。

4

8 回答 8

6

只需将pausesLocationUpdatesAutomaticallyLocation Manager 的属性设置为NO。这是 IOS 6 的一项新功能,可在应用程序在后台运行时禁用位置更新。此属性的默认值为YES

于 2012-10-08T12:20:51.360 回答
6

确保项目的 .plist 文件中有 CFBundleDisplayName。添加该密钥为我修复了它。

于 2012-09-26T15:25:37.490 回答
4

这是iOS6中的一个变化:

您需要实现locationManager:didUpdateLocations:而不是 locationManager:didUpdateToLocation:fromLocation 以便在位置更新时得到通知。

您还应该阅读有关startUpdatingLocation的文档。

于 2012-09-20T23:38:21.880 回答
1

就我而言,我的位置管理器属于不同的类,我从主控制器调用这个类。这不起作用,并且没有调用 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: 时一切正常

于 2013-01-21T01:23:18.693 回答
0

该问题似乎在 IOS 6.1 Beta2 中得到解决 - http://www.youtube.com/watch?v=aFZR0eMUV74

于 2012-11-16T19:19:09.143 回答
0

设置 CFBundleDisplayName 为我解决了这个问题。从未调用过相同的位置更新,只需设置 info.plist 参数即可开始工作。

于 2013-02-27T02:29:24.533 回答
0

我已经尝试了 plist 文件中的所有内容、清理、重建、新目标、配置等,等等。没有任何效果。但最后我已经修好了。我必须从头开始创建一个新的 Xcode 4.5 项目,重新配置它,逐个文件和逐个框架地手动添加框架。似乎我的旧 XCode 项目在内部与上一个 XCode 不兼容。我在这里写这个是因为也许它可以节省某人接下来 10 个小时的工作。

于 2013-02-28T12:09:54.137 回答
-4

我在这里是不是太简单了?在隐私下,位置看起来和以前的问题一样。有什么大惊小怪的?

于 2012-09-22T18:12:14.830 回答