2013-03-18 68 views
-1

我對Objective-C很新,但我正在玩儘可能多的學習。CLLocationManager,代理沒有被調用

我需要在靜態類中調用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 
+1

你也應該實現'的LocationManager:didFailWithError:'和檢查,看看是否被調用來代替。 – 2013-03-18 19:12:21

+0

爲我工作。謝謝 – 2013-10-04 12:54:53

回答

0

問題似乎是您的PositionManager實例(您稱爲positionManage)已經存在(alloc-init),然後又因爲沒有保留在任何位置而再次離開存在。

(實際上,尋找你的代碼,同樣的事情似乎是你CLLocationManager,你叫locationManager,你實例化,但你不保留,因此在一團煙霧瞬間消失的事實。)

因此,它可能會幫助您停止並瞭解「玩遊戲」之前內存管理在Objective-C中的工作方式。

+0

這聽起來像一個**愚蠢的**問題,但我該怎麼做?介意更新你的答案?我會盡快接受。 – OptimusCrime 2013-03-18 19:11:56

+0

我寫了一本教你iOS編程的書。內存管理章節在這裏:http://www.apeth.com/iOSBook/ch12.html但在我看來,你可能做得很好從一開始就開始。 :) – matt 2013-03-18 19:13:55

+0

嘗試爲CLLOcationManagerDelegate添加Error委託。首先它可能不適用於模擬器。通過使用設備控制器會出現錯誤委託方法。嘗試一下。謝謝 – 2013-10-04 12:54:32

0

在你的PositionManager類中,你有字段locationManager,但我看不到你給它分配實際的實例。這可能會導致ARC破壞您的CLLocationManager實例,因爲沒有任何強引用它的對象。

嘗試添加此:

positionManage.locationManager = locationManager;