我是ios新手,来自C#的繁重的UI工作。我有一个应用程序,我想控制哪些按钮是启用禁用基于我的代码中的一些逻辑。为此,我创建了一个小方法来处理按钮的状态,如下所示:
-(void)activateUI:(BOOL *)activate {
[ validateDataBtn setEnabled: *activate ] ;
[ modifyCompDataBtn setEnabled: *activate ] ;
[ saveCompDataBtn setEnabled: *activate ] ;
}其中所有这些IBOutlets都绑定到UI按钮,如下所示:
__weak IBOutlet UIButton *saveCompDataBtn;
__weak IBOutlet UIButton *modifyCompDataBtn;
__weak IBOutlet UIButton *validateDataBtn;当我运行应用程序时,在我的方法的第一行得到一个异常:
[ validateDataBtn setEnabled: *activate ] ;错误是EXC_BAD_ACCESS (代码= 2,地址=0X0)我做错了什么?
发布于 2012-10-21 03:32:21
好呀
- (void)activateUI:(BOOL)activate {
[validateDataButton setEnabled:activate];
// etc...
}我不知道为什么你需要使用一个指针指向BOOL激活...
编辑:
作为标量访问与指针访问的示例:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
@interface Foo:NSObject
@property (nonatomic, retain) NSTextField *field;
- (void)activateUI:(BOOL *)activate;
- (void)activateUIScalar:(BOOL)activate;
@end
@implementation Foo
@synthesize field;
- (void)activateUI:(BOOL *)activate {
NSLog(@"%s - setting to: %d",__FUNCTION__,*activate);
[[self field] setEnabled:*activate];
}
- (void)activateUIScalar:(BOOL)activate {
NSLog(@"%s - setting to %d (scalar)",__FUNCTION__, activate);
[[self field] setEnabled:activate];
}
@end
int main(int argc, char *argv[]) {
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
BOOL flag = NO;
Foo *myFoo = [Foo new];
[myFoo activateUI:&flag];
flag = YES;
[myFoo activateUI:&flag];
// now using scalar (99.999% of the time the right way)
[myFoo activateUIScalar:YES];
[myFoo activateUIScalar:NO];
[myFoo release];
[p release];
}将以下内容打印到控制台:
2012-10-20 14:49:14.228 Untitled 4[27444:707] -[Foo activateUI:] - setting to: 0
2012-10-20 14:49:14.230 Untitled 4[27444:707] -[Foo activateUI:] - setting to: 1
2012-10-20 14:49:14.230 Untitled 4[27444:707] -[Foo activateUIScalar:] - setting to 1 (scalar)
2012-10-20 14:49:14.231 Untitled 4[27444:707] -[Foo activateUIScalar:] - setting to 0 (scalar)https://stackoverflow.com/questions/12991675
复制相似问题