2011-03-21 14 views
7

私はiphone sdk4.0.Inで1つのアプリケーションを作成していますが、更新されたロケーションメソッドは決して呼び出されませんでした。 私は以下のコードを与えました。助けてください。事前に感謝します。didUpdateLocationメソッドが呼び出されなかった

-(id)init 
{ 
    [super init]; 

    obj=[[UIApplication sharedApplication]delegate]; 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    //locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m 
    [locationManager startUpdatingLocation]; 

    return self; 

} 

-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"%f",newLocation.coordinate.latitude); 

    NSLog(@"%f",newLocation.coordinate.longitude); 

    obj=[[UIApplication sharedApplication]delegate]; 

    location=[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude]; 
    obj.lattitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.latitude]; 

    obj.longitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude]; 
    //location=[[CLLocation alloc]initWithLatitude:39.9883 longitude:-75.262227]; 
} 
+0

私は何もしませんでした。私はちょうど1つの新しいプロジェクトを作成し、それにすべてのクラスをコピーしました。私はどのようにわかりません?しかし、それは働いた.. –

答えて

5

HIのコードは大丈夫です。 これが可能な理由は次のとおりです。

init:locationServicesEnabledがあるかどうかを確認してください。

locationManager = [[CLLocationManager alloc] init]; 
if(locationManager.locationServicesEnabled == NO){ 
    //Your location service is not enabled, Settings>Location Services 
} 

他の理由で、あなたのアプリに位置情報を取得できないことがあります。 解決方法:iPhoneからアプリケーションを削除して再構築するだけで、ダイアログボックスがポップアップして[許可する場所]になります。エラー

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error 
{  
    NSLog(@"Error while getting core location : %@",[error localizedFailureReason]); 
    if ([error code] == kCLErrorDenied) { 
     //you had denied 
    } 
    [manager stopUpdatingLocation]; 
} 

をチェックする

使用これは、そうでない場合は、すべてのあなたはすでに、この問題を、それはiPhoneは2Gだった場合はiPhone 3G以降、 にインストールすることができ、IOS 4.0を、も実行していた 、OKらしいです発生する。

+1

私はこれを私のアプリに追加しました..仕事はgr8 ... –

1

あなたの代議員の-locationManager:didFailWithError:はこれまでに呼び出されますか?おそらく、ある時点でロケーションデータへのアクセスが拒否され、プロンプトが表示されない場合もありますが、アクセスは拒否されています。

0

allocinitのロケーションマネージャの後、ロケーションサービスが許可されているかどうかを確認します。このコードはアップルの "LocateMe"コードサンプルのものです

シミュレータでテストする場合は、代わりにデバイスでテストしてみてください。シミュレータでは、コンピュータのWiFiがオンになっていること、および既知の場所のデータベースにあるWiFiベースステーションを見つけることができることが必要です。

3

これをシミュレータでテストしている場合、動作しません。

これは、デバイスが場所を変更したときにのみ呼び出され、シミュレータは場所を変更しないためです。

+0

いいえ。私はシミュレータをチェックしていません。私はiPhoneのデバイスでそれをチェックしています –

+0

あなたは現在の場所を手動で呼び出して、あなたが有効な場所を持っていることを確認しましたか?これは、locationManager.locationを使用して行うことができます。 – Zebs

+7

これは真実ではありません、あなたは今動きをシミュレートすることができます。 'Simulator - > Debug - > Location' – Peres

5

CLLocationManagerをプロパティとして追加したことを確認してください。

@property(nonatomic、strong)CLLocationManager * locationManager;

+1

Gabrielあなたは私に良い方法を教えてくれました。今解決しました。didupdateLocationメソッドを呼び出そうとしましたが、あなたの提案以外のすべてを適用したにもかかわらず呼び出しませんでした。最後にCLLocationManager property.Nowデリゲートメソッドが呼び出され、私は更新位置(Lat、long)の値を取得します。 – user3182143

+0

とても弟ありがとう – user3182143

+0

プロパティCLLocationManagerの理由や説明を教えてください。なぜプロパティなしで動作しないのですか? – user3182143

18

はさらにiOS8であなたは、2つの余分なものを持っている必要があります。

  • を開始することを求めてロケーションマネージャからあなたのInfo.plistとリクエストの承認にキーを追加します。

    • NSLocationWhenInUseUsageDescription

    • NSLocationAlwaysUsageDescription

  • あなたは、対応する場所メソッドの許可を要求する必要があります。

    • [self.locationManager requestWhenInUseAuthorization]

    • [self.locationManager requestAlwaysAuthorization]

コードの例:

self.locationManager = [[CLLocationManager alloc] init]; 
self.locationManager.delegate = self; 
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. 
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
    [self.locationManager requestWhenInUseAuthorization]; 
} 
[self.locationManager startUpdatingLocation]; 

出典:http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

+0

...一般的に、_Always_メソッドは推奨されません。何をしているのかわからない場合は、他のメソッドを使用してください。 – bshirley

関連する問題