2011-02-02 9 views
10

iOS 4.0 öncesinde, CoreLocation doğru irtifa rapor veriyordu, şimdi her zaman 0 ft olarak bildirir. iOS CoreLocation Rakım

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    NSString *tLatitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.latitude]; 
    NSString *tLongitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.longitude]; 
    /* the following returns 0 */ 
    NSString *tAltitude = [NSString stringWithFormat:@"%i", newLocation.altitude]; 

    /* theres more code, but it's not relevant, 
         and this worked prior to iOS 4.0*/ 
    [manager stopUpdatingLocation]; 
} 

Cihaz ne de Simülatörü üzerinde çalışan değil, başkasının deneyim bu konu nedir? Core Location Data Types Reference kaynaktan

+0

Bunu bir aygıtta veya Simülatörde test ediyor musunuz? –

+0

Cihaz ve Simülatör. – WrightsCS

cevap

11

iOS 4.0'da yeni bir özellik olan startMonitoringSignificantLocationChanges kullanıyorsanız, irtifa güncelleştirmelerini alamazsınız. Bu düşük güç modu, yalnızca kullanıcının konumunu belirlemek için hücre kuleleri kullanır ve bu yöntem irtifa bildirmez.

Daha genel olarak, iPhone konumunuzu bulmak için üç yolu vardır - hücre kuleleri, wi-fi ve GPS. GPS kullanıldığında sadece yükseklik alırsınız. Bu yüzden, cihazınızı GPS kullanmaya zorlamak için desiredAccuracy ayarınızı ayarlamanıza izin verseniz bile, bir kullanıcı iç mekandaysa iPhone muhtemelen bir GPS sinyali alamayacak ve hücreye veya wi-fi'ye geri dönmeyecektir. Bu durumda, irtifa almayacaksın. Ayrıca bir iPod Touch kullanan kullanıcıları da düşünün - sadece wi-fi üzerinden bir konum elde etme ve böylece bir irtifa bildirme özelliği yoktur.

1

:

CLLocationDistance veri türü (yükseklik için veri tipi) double olup. stringWithFormat için kullandığınız biçimlendirici integer'dur. Rakımı önce bir integer'a göndermeniz veya double (% f) biçimlendiricisini kullanmanız gerekir.

+0

Yüksekliği bir tam sayıya dönüştürüyorum. Daha önce belirttiğim gibi, bu özellik iOS 4.0'dan önce mükemmel bir şekilde çalıştı (yani kod değiştirilmedi). – WrightsCS

+0

Aynı zamanda, örneğin, 5280 ft. – WrightsCS

+0

@ WrightsCS'yi göstermek için kullandığım/verdiğim/mükemmel bir irtifa elde ettiğim yol, bu bir fark yaratıp yaratmadığını görmek için çift biçimlendiriciyi denediniz mi? – raidfive

1

Denediğin iki şey. Her şeyden önce, konum yöneticisinin desiredAccuracy'u kCLLocationAccuracyBest'a ayarlamayı deneyin. Bu çalışmazsa, [manager stopUpdatingLocation];'u kaldırmayı deneyin ve NSLog'u didUpdateToLocation numaralı rakıma yerleştirin. Bazen rakımı göstermeden önce biraz daraltmak zorundadır.

+0

kCLLocationAccuracyBest her zaman ayarlanmış ve stopUpdatingLocation öğesinin kaldırılmasının bir etkisi yoktur. – WrightsCS

0

Çekirdek Konum her zaman irtifayı hemen bildirmez. Genellikle "başarı" delegesi yöntemimde sıfır irtifasını kontrol ederim. Rakım hala 0 ise kontrol etmeye devam ediyorum, aksi takdirde CoreLocation'ı çeviriyorum.