Ответ 1
Убедитесь, что в файле проекта .plist есть имя CFBundleDisplayName. Добавление этого ключа фиксировало это для меня.
Я обновил my iOS SDK
до версии 6. После этого я скомпилировал свое приложение (отлично работает в iOS 4 & iOS 5
), но теперь службы определения местоположения не работают. Мой delegate
не получает никакого обновления, а стрелка верхнего положения не появляется... Я запускаю службу обычным способом:
[locationManager startUpdatingLocation];
Мой проект не ARC.
Что происходит? Это сводит меня с ума...
Спасибо заранее.
Убедитесь, что в файле проекта .plist есть имя CFBundleDisplayName. Добавление этого ключа фиксировало это для меня.
Просто установите для свойства pausesLocationUpdatesAutomatically
диспетчера местоположений значение NO
. Это новая функция IOS 6, которая отключает обновления местоположения при запуске приложения в фоновом режиме. Значением по умолчанию этого свойства является YES
.
Это изменение в iOS6:
Вам нужно реализовать locationManager: didUpdateLocations: вместо locationManager: didUpdateToLocation: fromLocation, чтобы получать уведомление о обновлении местоположения.
Вы также должны прочитать документацию startUpdatingLocation.
В моем случае у меня был менеджер местоположений в другом классе, и я вызывал этот класс с основного контроллера. Это не сработало, и didUpdateLocations не был вызван.
//
// LocationServices.h
//
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
@interface LocationServices : NSObject <CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
@property (nonatomic, retain) CLLocationManager *locationManager;
- (void)startLocationServices;
@end
// LocationServices.m
#import "LocationServices.h"
@implementation LocationServices
@synthesize locationManager, currentLocation;
- (void)startLocationServices {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.pausesLocationUpdatesAutomatically = NO;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
if ([CLLocationManager locationServicesEnabled]) {
[locationManager startUpdatingLocation];
} else {
NSLog(@"Location services is not enabled");
}
}
////////////////////////////////////////////////
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
CLLocation* location = [locations lastObject];
NSLog(@"Updated: latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
}
@end
// Main controller
- (void)viewDidLoad {
[super viewDidLoad];
.....
LocationServices *locationSerices = [[LocationServices alloc]init];
[locationSerices startLocationServices];
......
}
Приведенный выше код не работает. Зачем? Я не знаю... вы можете легко потерять интерес, когда тратите столько времени, пытаясь сделать то, что должно быть простым. iOS - очень сложная и недружественная среда программирования. Есть много способов сделать одно, только одно работает, вы не можете смешивать и сопоставлять, не вводя проблему. Вы должны делать все по книге, или вы или ничего не получаете. Даже не намек на то, что вы сделали что-то не так... разочарование...
Вместо этого, когда я реализовал locationManager: (CLLocationManager *) manager didUpdateLocations: в главном контроллере все работало нормально
Проблема, похоже, решена в IOS 6.1 Beta2 - http://www.youtube.com/watch?v=aFZR0eMUV74
настройка CFBundleDisplayName решила проблему для меня. То же самое обновление местоположения никогда не вызывалось, просто установите параметр info.plist и он начнет работать.
Я пробовал все в файлах plist, чистил, перестраивал, новые цели, конфигурации и т.д. и т.д. и т.д. Ничего не работало. Но НАКОНЕЦ Я исправил это. Мне пришлось создать новый проект Xcode 4.5 с нуля, перенастроить его, вручную добавить файл по файлу и структуре. Похоже, что мой старый проект XCode имел что-то внутренне несовместимое с последним XCode. Я пишу это здесь, потому что, возможно, это может спасти кого-то в течение следующих 10 часов работы.
Я слишком упрощен здесь? В разделе "Конфиденциальность" местоположения выглядят так же, как в предыдущих выпусках. Что все беспокоит?