IBAction的变量

时间:2012-03-10 13:59:35

标签: objective-c xcode variables double ibaction

我有问题,我试图解决像一周。 我的目标是从IBAction中获取变量,例如在-(void)viewDidLoad中使用。 但就我而言,我只能在我的IBAction ..

中使用我的变量
- (IBAction) changeLat:(NSNumber *)str {

longi =  str; 
double lop = longi.doubleValue;

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

- (void)viewDidLoad
{
[super viewDidLoad];

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

NSLog显示一切正常,但在视图中加载它甚至没有记录它。

2 个答案:

答案 0 :(得分:1)

如果在-IBAction中创建变量,则该变量的范围仅为该方法,因此您无法访问该变量以外的变量。

如果您希望变量对您的类是全局变量,则必须在类的声明中创建它,如下所示:

@interface MainViewController () {
@private
    double lop;

}

将它放在.m文件的开头,然后在你的所有课程中都可以访问lop。

您可以在此处详细了解变量的范围:

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

答案 1 :(得分:0)

实际上,预处理器将IBAction转换为void。它被Interface Builder用作标签,将该方法标识为能够与IB对象相关联的动作。

没有办法(AFAIK)在函数中使用两种返回类型(例如`(IBAction double)',相当于'(void double)'),但是一个好的做法可能是这样的:

- (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值。

干杯。