2011-11-02 28 views
1

我正在使用自定義手勢識別器(如鏈接Intercepting/Hijacking iPhone Touch Events for MKMapView中給出的)來檢測MKMapView上的觸摸事件。手勢識別器在WildcardGestureRecognizer.h中定義,並在WildcardGestureRecognizer.m文件中實現。當該手勢識別器被添加到的MKMapView,人們可以從下面的方法讀取任何觸摸事件從自定義類文件調用MainViewController中的方法

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


} 

基於此觸摸檢測我想從MainViewController(含的MKMapView)調用方法tapMethod。

-(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]; 

    } 

它可以打印 「地圖挖」,但不會改變變量dontUpdateLocation的價值。 我該怎麼辦?

+0

變量dontUpdateLocation被初始化了什麼值?除了'tapMethod'之外,還有其他什麼方法可以修改這個變量? – Mat

+0

@Mat它用值0初始化。沒有其他方法修改這個變量。 – chatur

+0

NSLog(@「%i」,dontUpdateLocation);'NSLog(@「map tapped」)之前''; dontUpdateLocation是一個int嗎? – Mat

回答

1

從我從您的意見理解,我認爲這個問題是由於這樣的事實:當你這樣做:

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

你沒有創建現有mainviewcontroller一個參考,但要創建一個指向內存中另一個對象的不同指針。 您可以使用的appDelegate存儲(設置@property和@synthesize)的變量,然後像這樣訪問:

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

我建議你把這些圖案的外觀和深度:SingletonsMVCDelegation

希望這會有所幫助。

+0

非常感謝您的耐心。我使用appDelegate方法來存儲變量,並且它正常工作。 – chatur

相關問題