Objective c IBAction之外的变量

Objective c IBAction之外的变量,objective-c,xcode,variables,double,ibaction,Objective C,Xcode,Variables,Double,Ibaction,我有一个问题,我这周都在努力解决。 我的目标是从我的iAction中获取变量,例如在-(void)viewDidLoad中使用。。 但就我现在而言,我只能在我的iAction中使用我的变量 - (IBAction) changeLat:(NSNumber *)str { longi = str; double lop = longi.doubleValue; NSLog(@"%f",lop); } - (void)viewDidLoad { [super viewDidLoad];

我有一个问题,我这周都在努力解决。 我的目标是从我的
iAction
中获取变量,例如在
-(void)viewDidLoad
中使用。。 但就我现在而言,我只能在我的
iAction
中使用我的变量

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

longi =  str; 
double lop = longi.doubleValue;

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

- (void)viewDidLoad
{
[super viewDidLoad];

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

NSLog
可以很好地显示操作中的所有内容,但在视图中,它甚至不会重新组织它。

如果在-IBAction内部创建变量,则该变量的作用域仅限于该方法,因此您无法访问该方法外部的变量

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

@interface MainViewController () {
@private
    double lop;

}
- (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 ????;
}
把这个放在你的.m文件的开头,然后lop就可以在你所有的类中访问了

您可以在此处阅读有关变量范围的更多信息:


实际上,
iAction
由预处理器转换为
void
。Interface Builder使用它作为标签,将此方法标识为可与IB对象关联的操作

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

@interface MainViewController () {
@private
    double lop;

}
- (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 ????;
}
-(iAction)changelAction:(id)发送方{
NSNumber*str=;
[自我改变lat:str];
}
-(双)变更号:(NSNumber*)str{
longi=str;
双lop=长双值;
NSLog(@“%f”,lop);
返回????;
}
您对
changeLat
的第一次声明似乎是错误的,因为作为第一个参数,您将始终获得与IB相关的“sender”或“caller”对象(当然,当从操作调用时),因此,您需要从有效位置获取
str

干杯