我有2个班,ClassA和ClassB
ClassA将一个BOOL变量设置为No。
我试图从ClassB将此变量设置为Yes,但似乎无法弄清楚如何。
下面是我使用的代码,它不起作用,它只是我认为会起作用的,我已经删除了不必要的信息:
A类:
ClassA.h
@interface AppDelegate : NSObject <NSApplicationDelegate> {
BOOL boolean;
}
- (id) init;
ClassA.m
- (id) init {
boolean = NO;
}
B组:
ClassB.h
#import "ClassA.h"
- (IBAction) setBoolean: (id)sender;
ClassB.m
- (id) init {
ClassA * theClassA = [[ClassA alloc] init];
return self;
}
- (IBAction) setBoolean: (id)sender {
[theClassA boolean] = YES;
}
我希望这是有道理的。我只想将ClassA中的BOOL布尔值设置为ClassB中的YES。
答案 0 :(得分:4)
您无法指定类似的属性([object property] = value
)。正确的语法是[object setProperty:value]
或object.property = value
。
我不会调用变量boolean。可能会误导。尽管它不是Objective-C中布尔变量的关键字,但它还有很多其他语言。
你必须在init方法中返回初始化对象(self)(你有一个id返回类型,而不是void):
- (id) init {
self = [super init];
if (self) {
boolean = NO;
}
return self;
}
此外,您没有在ClassB实现中为theClassA指定实例变量。您只需创建一个本地对象然后泄漏它(您不会释放它)。相反,在ClassB.h中声明它:
@class ClassA;
@interface ClassB : NSObject {
ClassA *theClassA;
}
- (IBAction)setBoolean:(id)sender;
@end
然后像这样初始化它:
- (id) init {
self = [super init];
if (self) {
theClassA = [[ClassA alloc] init];
}
return self;
}
不要忘记在dealloc中发布它:
- (void)dealloc {
[theClassA release];
[super dealloc];
}
最后一件事。在ClassB中使用方法- (IBAction) setBoolean: (id)sender
意味着ClassB具有名为boolean
的属性,但实际情况并非如此。我建议重命名该方法和/或重新思考您的课程设计。