Несколько датчиков в iOS

У меня есть два разных POC, один для акселерометра и один для GPS. Тем не менее, я не понимаю архитектуру, позволяющую сочетать оба приложения. Мне нужно инициализировать как ускорение, так и GPS при загрузке приложения. У меня основной вид привязан к ускорению, но также нужно и расположение устройства.

Моя текущая архитектура - это проекты в рабочей области.

  • Основное приложение
  • Служебное приложение
  • Приложение «Службы»
  • Приложение домена

Основное приложение ViewController наследует

: UIViewController

Все правильно подключено, ускорение работает как положено.

В классе Utility CoreLocationUtility он наследует CLLocationManagerDelegate.

Вопрос в том, как мне зарегистрировать делегата из того же представления, что и тип AccelDelegate?


person Aaron Scribner    schedule 01.12.2012    source источник


Ответы (1)


Если вы хотите, чтобы ваш ViewController действовал как делегат как для акселерометра, так и для GPS, укажите в его заголовочном файле, что он подчиняется обоим протоколам делегата:

@interface ViewController : UIViewController <CLLocationManagerDelegate, UIAccelerometerDelegate> {
    CLLocationManager *myLocationManager; // an instance variable
}
 // ... your definitions
@end

то где-то в вашем ViewController

[UIAccelerometer sharedAccelerometer].delegate = self;
myLocationManager = [[CLLocationManager alloc] init];
myLocationManager.delegate = self;

затем где-нибудь еще в вашем ViewController поместите методы делегата для обоих протоколов

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    // ... your code
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
   // ... your code

}

и это должно работать, хотя могут быть опечатки, я это не компилировал. Кроме того, по моему опыту, код менеджера местоположения имеет тенденцию становиться довольно большим. Возможно, вам будет гораздо лучше поместить его в собственный класс, который будет создан ViewController.

Кто-нибудь может объяснить, почему единственный метод в протоколе UIAccelerometerDelegate устарел?

person emrys57    schedule 01.12.2012
comment
Протокол dperectaed, потому что вместо этого вы должны использовать CoreMotion: см. ">stackoverflow.com/questions/6742531/ - person AlexWien; 01.12.2012
comment
Спасибо! Я никогда не использовал акселерометр, я отложу это на потом. - person emrys57; 02.12.2012