Как настроить контроллер представления в качестве делегата для двух вещей (например, LocationManager и Акселерометр)? - PullRequest
3 голосов
/ 10 июля 2009

Извините, если название моего вопроса кажется принципиально неосведомленным. Позвольте мне объяснить, что я пытаюсь сделать.

Я определил следующий подкласс UIViewController, который запускает LocationManager и имеет кнопку «Начать запись» для сохранения трека GPS.

Теперь я хотел бы также запустить акселерометр и позволить пользователю также записать это.

Мой подкласс ViewController является делегатом LocationManager, так что я должен использовать для делегата акселерометра? Могу ли я использовать тот же вид или мне нужно определить подпредставление?

Вот интерфейс для моего подкласса UIViewController:

@interface RootViewController : UIViewController <CLLocationManagerDelegate> {
    NSMutableArray *eventsArray;
    NSManagedObjectContext *managedObjectContext;
    CLLocationManager *locationManager;
    BOOL recording;
    UILabel *pointLabel;
    UIButton *startStop;
}

-(void)toggleButton;

Я могу опубликовать больше кода, если это необходимо, но я думаю, что это все, что применимо. Спасибо за вашу помощь, я только начинаю разработку для iPhone, и мой опыт, если у меня есть, лежит в языках программирования без указателей:)

1 Ответ

8 голосов
/ 10 июля 2009

Совершенно разумно, чтобы один объект контроллера был делегатом для более чем одной вещи. Единственным ударом будет то, что и у вашего LocationManager, и у вашего акселерометра есть методы делегирования, которые перекрываются, т. Е. Если они оба требуют, чтобы их делегаты ответили на метод с одинаковой подписью.

Кроме того, вы просто настроили бы свой контроллер для делегирования для обоих, почти так же, как вы настроили его для делегирования для одного:

@interface Controller : UIViewController
    <CLLocationManagerDelegate, AccelerometerDelegate>
{
    ...
}

И позже:

[myLocationManager setDelegate:myController];
[myAccelerometer setDelegate:myController];

Пожалуйста, извините за наименование. Я не знаю, как называть названия классов Accelerometer и LocationManager, которые вам нужны. Я просто использовал любые описательные имена, которые приходили на ум:)

...