Вызов метода в MainViewController из файла пользовательского класса - PullRequest
1 голос
/ 02 ноября 2011

Я использую собственный распознаватель жестов (как указано в ссылке Перехват / перехват событий касания iPhone для MKMapView ) для обнаружения событий касания в MKMapView. распознаватель жестов определен в WildcardGestureRecognizer.h и реализован в файле WildcardGestureRecognizer.m. Когда этот распознаватель жестов добавлен в MKMapview, из следующего метода можно прочитать любые сенсорные события

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (touchesBeganCallback)
        touchesBeganCallback(touches, event);
    NSLog(@"touchesBegan");


}

На основании этого обнаружения касания я хочу вызвать метод tapMethod из MainViewController (содержащий MKMapView).

-(void) tapMethod
{
    dontUpdateLocation =1;// a variable to check stoppoing of location update.
    NSLog(@" map tapped");
}

Я пытался подписаться

  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        if (touchesBeganCallback)
            touchesBeganCallback(touches, event);
        NSLog(@"touchesBegan");
        MainViewController *updateController = [[MainViewController alloc]init ];
        [updateController tapMethod];
        [updateController release];

    }

Он печатает "map tapped", но не меняет значение переменной dontUpdateLocation. Как я могу это сделать?

1 Ответ

1 голос
/ 02 ноября 2011

Из того, что я понимаю из ваших комментариев, я думаю, что проблема связана с тем, что, когда вы делаете это:

MainViewController *updateController = [[MainViewController alloc]init ];
[updateController tapMethod];
[updateController release];

вы не создаете ссылку на существующий mainviewcontroller, но вы создаете другой указатель, который указывает на другой объект в памяти. Вы можете использовать appDelegate, чтобы сохранить (установить @property и @synthesize) переменную, а затем получить доступ следующим образом:

YourAppDelegate *appDel=(YourAppDelegate *)[[UIApplication sharedApplication] delegate];
appDel.dontUpdateLocation=1;

Я предлагаю вам взглянуть и углубиться в следующие шаблоны: Синглеты , MVC и Делегирование

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...