【问题标题】:How can I assign values to other class variable in objective-c如何在objective-c中为其他类变量赋值
【发布时间】:2025-12-11 17:15:01
【问题描述】:

下面的代码正在运行,我可以在第二个屏幕中看到这些值。但是我在其他具有这种格式的不同变量的类中使用相同的方法。但是,如果在我用点键入类名之后,它不会向我显示变量。我想不通。有没有办法将值传递给其他类。

        InstallProfiler_2 *installProfiler2 = [[InstallProfiler_2 alloc] initWithNibName:@"InstallProfiler_2" bundle:nil];

        installProfiler2.profilerType2 = profilerType;

        [self.navigationController pushViewController:installProfiler2 animated:NO];
        [installProfiler2 release];

【问题讨论】:

  • 你能给我们什么不工作而不是什么工作吗?

标签: objective-c ios class-variables


【解决方案1】:

点语法仅适用于 property/synthesize

【讨论】:

  • 是的,我使用了属性并合成了。但它仍然无法正常工作。
  • 您是否正确导入了所需的文件?并且不仅使用像@class Toto这样的前向声明?
【解决方案2】:

创建自定义 setter/getter:

+ (BOOL)awesomeClassVar {
    return _classVar;
}

+ (void)setAwesomeClassVar:(BOOL)newVar {
    _classVar = newVar;
}

然后作为其他类的方法调用:

BOOL theOtherClassVar = [AwesomeClass awesomeClassVar];
[AwesomeClass setAwesomeClassVar:!theOtherClassVar];

【讨论】:

  • 谢谢。但是你能详细解释一下吗?我的变量在 A 类中拥有一个名称。我在该类本身中设置值。现在我正在导航到 B 类。在这里我需要访问在 A 类中设置的值。
  • 这两种方法都在 CLASS A 中。下面两行从 CLASS B 中访问变量。
【解决方案3】:

确保:

  • 您已导入类头。
  • @property 声明位于此标头中,而不是类扩展。

@property 指的是 ivars 所以当你说

如果在我输入带点的类名之后

这个术语不正确,您可能是指在您开始输入指向类实例的变量名称之后。

ClassA.h

@interface ClassA : NSObject

@property (nonatomic, weak) NSInteger myInt;

@end

ClassA.m

@implementation ClassA

@synthesize myInt = _myInt;

@end

ClassB.m

#import "ClassA.h"   // <- Import the header of the class

@ implementation ClassB

//  .. other methods and stuff

- (void)myMethod;
{
     ClassA *instanceOfClassA = [[ClassA alloc] init];   // <- Working with an instance not a class
     instanceOfClassA.myInt = 1;
}

@end

更新

确保您的@property () 在圆括号之间没有readonly。 还要确保您在实现中具有@synthesize'd ivar,或者为 ivar 提供了 getter 和 setter。

未能显示一些相关代码,因此我们实际上可以看到您在做什么 - 我们在这里非常盲目地回答。

【讨论】:

  • 他问的是类变量,而不是实例变量。
  • @coneybeare 我不太确定,我认为这可能只是问题的措辞不佳。如果你看他说他在类本身中成功使用点符号的例子,我认为点符号只适用于实例?
  • 谢谢,但我收到此错误。对象不能设置为只读属性或找不到设置器
  • 您为与您尝试访问的类变量对应的属性赋予了哪些属性? (非原子、保留、分配等...)
  • @property(非原子,保留)NSString *variablename