2012-03-10 42 views
2

我有問題,即時通訊試圖得到像周解決。 我的目標是讓變了我的IBAction的,在-(void)viewDidLoad .. 使用例如但據我現在我只能在我的IBAction用我的變量..可變的IBAction

- (IBAction) changeLat:(NSNumber *)str { 

longi = str; 
double lop = longi.doubleValue; 

NSLog(@"%f",lop); 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

NSLog (@"%@",lop); 
} 

NSLog說明一切罰款的行爲,但在看來確實加載它甚至不記錄它。

回答

0

其實,IBAction由預處理器轉換爲void。 Interface Builder使用它作爲標識,將此方法標識爲可以從IB對象關聯的操作。

有沒有辦法(據我所知)在函數中使用兩個返回類型(例如`(IBAction爲雙)',相當於'(無效雙)「),但良好的做法可能是這樣的:

- (IBAction)changeLatAction:(id)sender { 
    NSNumber *str = <get the NSNumber from a valid place>; 
    [self changeLat:str]; 
} 

- (double) changeLat:(NSNumber *)str { 
    longi = str; 
    double lop = longi.doubleValue; 
    NSLog(@"%f",lop); 
    return ????; 
} 

您的第一個changeLat聲明似乎是錯誤的,因爲作爲第一個參數,您將始終獲得與IB相關的「發件人」或「調用者」對象(當然,當從一個動作調用時) ,您需要從有效位置獲取str值。

乾杯。

+0

非常感謝! – Edgars 2012-03-11 17:55:23

1

如果您在-IBAction中創建了一個變量,那麼該變量的範圍只有該方法,因此您無法在其外部訪問該變量。

如果你希望你的變量是全球性的,以你的類,你必須在你的類的聲明來創建它,就像這樣:

@interface MainViewController() { 
@private 
    double lop; 

} 

在您.m文件的開頭將這個和那麼洛普會在你所有的課堂上接受。

您可以在此處詳細瞭解該變量的作用域:

http://www.techotopia.com/index.php/Objective-C_Variable_Scope_and_Storage_Class