2012-11-18 60 views
-1

我一直在閱讀,使用Google搜索並觀看Lynda視頻以查找最近幾天的答案。我還沒有找到一個好的答案。從IBAction方法獲取變量或對象

這看起來應該很簡單。使用正常的方法,我可以傳遞變量。但隨着IBAction(無效)我不知道如何獲得一個變量到另一種方法。

這裏是我想要做的一些簡單的例子:

- (IBAction)treeButton:(id)sender { 
    int test = 10; 
} 


-(void)myMethod{ 
    NSLog(@"the value of test is %i",test); 
} 

這是我真的想工作。我試着讓一個按鈕設置我想要存儲和使用另一種方法的初始位置。

- (IBAction)locationButton:(id)sender { 
    CLLocation *loc1 = [[CLLocation alloc] 
     initWithLatitude:_locationManager.location.coordinate.latitude 
     longitude:_locationManager.location.coordinate.longitude]; 
} 


-(void)myMethod{ 
    NSLog(@"the value of test is %i",test); 
    NSLog(@"location 1 is %@",loc1); 
} 

任何建議讓我朝正確的方向將是偉大的。我已閱讀並變量範圍觀看視頻,例如varaibles等只是不理解我需要在這裏

+0

也許重新觀看一個實例變量視頻? loc1需要是一個實例變量,目前它的作用域僅限於你的方法。 – jrturton

+0

在您的控制器中創建一個新的實例變量,即loc1,並在每次觸發某個IBAction時爲其分配一個值,並從其他方法中使用它。它很簡單。 – Sandeep

+0

感謝您的幫助。 esqew的答案告訴我,我正在重新定義我的方法內的實例變量。猜猜這很容易。 – Gulfer

回答

1

變化myMethod做,接受你所需要的參數:

- (void)myMethod:(CLLocation *)location { 
    NSLog(@"location 1 is %@", location); 
} 

調用它像這樣的東西:

- (IBAction)locationButton:(id)sender { 
    CLLocation *loc1 = [[CLLocation alloc] 
     initWithLatitude:_locationManager.location.coordinate.latitude 
     longitude:_locationManager.location.coordinate.longitude]; 
    [self myMethod:loc1]; 
} 

如果你需要通過多種方法或在代碼中的不同點是可訪問的,我建議爲0的實例變量在您的@interface聲明中。

@interface MyClass : NSObject { 
    CLLocation *loc1; 
} 

在你的方法,而不是重新聲明它,你只需設置:

loc1 = [[CLLocation alloc] 
     initWithLatitude:_locationManager.location.coordinate.latitude 
     longitude:_locationManager.location.coordinate.longitude]; 

myMethod,只需訪問:

- (void)myMethod{ 
    NSLog(@"location 1 is %@", loc1); 
} 
+0

感謝您的簡要回答。我在這裏問了一個問題之前花了3天的時間來弄清楚這個問題(瞭解了很多)。我沒有意識到我在我的方法中重新聲明瞭實例變量。現在完成了。謝謝!!! – Gulfer