2012-03-10 44 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