0

我对objective-c很陌生,但我正在尝试尽可能多地学习。

我需要在静态类中调用 CLLocationManager。我一直在谷歌搜索,但我不明白如何设置委托。因为这是一个静态类,我假设我需要创建一个新类并通过它。

静态类:

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

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

位置管理器.h

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

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

@property (strong, retain) CLLocationManager *locationManager;

@end

位置管理器.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
4

2 回答 2

0

问题似乎是您调用的 PositionManager 实例positionManage开始存在 ( alloc-init),然后又重新不存在,因为您没有在任何地方保留它。

(实际上,查看您的代码,您调用的 CLLocationManager 似乎也是如此locationManager。您实例化它但您不保留它,因此它会立即消失在一阵烟雾中。)

因此,它可能会帮助您在“玩耍”之前停下来并了解内存管理在 Objective-C 中是如何工作的。

于 2013-03-18T19:10:26.147 回答
0

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

尝试添加这个:

positionManage.locationManager = locationManager;
于 2013-03-18T19:15:23.547 回答