gpt4 book ai didi

objective-c - 设置其他类变量

转载 作者:行者123 更新时间:2023-12-03 16:29:12 25 4
gpt4 key购买 nike

我有 2 个类(class),ClassA 和 ClassB

ClassA 有一个 BOOL 变量设置为 No。

我正在尝试将此变量从 ClassB 设置为"is",但似乎不知道如何设置。

下面是我正在使用的代码,它不起作用,这只是我认为可行的代码,我已经删除了不必要的信息:

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 bool 值从 ClassB 设置为 YES。

最佳答案

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

我不会将变量称为 bool 值。可能会产生误导。尽管它不是 Objective-C 中 bool 变量的关键字,但它在许多其他语言中都是如此。

并且您必须在 init 方法中返回初始化的对象(self)(您有一个 id 返回类型,而不是 void):

- (id) init {
self = [super init];
if (self) {
boolean = NO;
}
return self;
}

此外,您没有在 ClassB 实现中为 ClassA 指定实例变量。您只需创建一个本地对象,然后泄漏它(不释放它)。相反,在您的 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 的属性,但事实并非如此。我建议重命名该方法和/或重新考虑您的类设计。

关于objective-c - 设置其他类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10637889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com