CLLocationManager,委托不被调用

时间:2013-03-18 19:07:42

标签: ios objective-c ios6

我对Objective-c很新,但我正在努力学习尽可能多的东西。

我需要在静态类中调用CLLocationManager。我一直在玩弄,但我不明白如何设置代表。因为这是一个静态类,我假设我需要创建一个新类并通过它传递它。

静态类:

PositionManager *positionManage = [[PositionManager alloc] init];

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:positionManage];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];

PositionManager.h

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface PositionManager : NSObject <CLLocationManagerDelegate> {
    CLLocationManager *locationManager;
}

@property (strong, retain) CLLocationManager *locationManager;

@end

PositionManager.m

#import "PositionManager.h"

@implementation PositionManager

@synthesize locationManager;

- (id)init {
    self = [super init];
    NSLog(@"hei?");

    return self;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    // Never gets called...
}

@end

2 个答案:

答案 0 :(得分:0)

问题似乎是您调用positionManage的PositionManager实例已经存在(alloc-init),然后再次出现,因为您没有将其保留在任何位置。

(实际上,查看你的代码,你的CLLocationManager似乎也是如此,你称之为locationManager。你实例化它但你没有保留它,所以它会在一阵烟雾中瞬间消失。 )

因此,在“玩游戏”之前,它可以帮助您停止并了解内存管理在Objective-C中的工作原理。

答案 1 :(得分:0)

在您的PositionManager类中,您有字段locationManager,但我没有看到您为其分配实际实例。这可能导致ARC破坏您的CLLocationManager实例,因为没有对象具有强引用。

尝试添加此内容:

positionManage.locationManager = locationManager;