我有问题,我试图解决像一周。
我的目标是从IBAction
中获取变量,例如在-(void)viewDidLoad
中使用。
但就我而言,我只能在我的IBAction
..
- (IBAction) changeLat:(NSNumber *)str {
longi = str;
double lop = longi.doubleValue;
NSLog(@"%f",lop);
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog (@"%@",lop);
}
它NSLog
显示一切正常,但在视图中加载它甚至没有记录它。
答案 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
值。
干杯。