设置其他类变量

时间:2012-05-17 14:39:55

标签: objective-c xcode cocoa

我有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。

1 个答案:

答案 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的属性,但实际情况并非如此。我建议重命名该方法和/或重新思考您的课程设计。