2

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

4

1 回答 1

4

您不能分配这样的属性 ( [object property] = value)。正确的语法是[object setProperty:value]or object.property = value

我不会调用变量布尔值。可能会产生误导。尽管它不是 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,但事实并非如此。我建议重命名该方法和/或重新考虑您的课程设计。

于 2012-05-17T14:44:01.503 回答