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];

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
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 に答える