我对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
答案 0 :(得分:0)
问题似乎是您调用positionManage
的PositionManager实例已经存在(alloc-init
),然后再次出现,因为您没有将其保留在任何位置。
(实际上,查看你的代码,你的CLLocationManager似乎也是如此,你称之为locationManager
。你实例化它但你没有保留它,所以它会在一阵烟雾中瞬间消失。 )
因此,在“玩游戏”之前,它可以帮助您停止并了解内存管理在Objective-C中的工作原理。
答案 1 :(得分:0)
在您的PositionManager类中,您有字段locationManager,但我没有看到您为其分配实际实例。这可能导致ARC破坏您的CLLocationManager实例,因为没有对象具有强引用。
尝试添加此内容:
positionManage.locationManager = locationManager;