【问题标题】:No setter method for assignment to property没有用于分配给属性的 setter 方法
【发布时间】:2014-02-01 16:10:56
【问题描述】:

我的常量和自定义枚举在一个单独的 .h 文件中。该文件是NSObject 的子类。

typedef NS_ENUM(NSInteger, MyEnumName) {
    EnumValueOne,
    EnumValueTwo
};

在另一个也是NSObject 的子类的类中,我有一个用于所述枚举的属性。

@property (assign, nonatomic) MyEnumName hello;

在它的实现文件中,我试图像这样设置它的值,

self.hello = EnumValueTwo;

但我在该行收到错误提示,

没有 setter 方法 'setHello:' 用于赋值给属性

我尝试为该属性手动声明一个 setter 方法,但它仍然不起作用。

如果我在视图控制器中做同样的事情,它工作正常。在 NSObject 子类中不能这样做。

谁能告诉我这是为什么以及如何纠正它?

谢谢。

【问题讨论】:

  • 请显示您所说的整个上下文self.hello
  • 实际上仅此而已。我只是想在方法中将值设置为该属性。整个方法体只有这行代码。
  • 你@synthesize 打招呼了吗?旧版本的编译器需要这个
  • 不,这是针对使用 Xcode 5 的 iOS 7 的。我合成了它,但问题仍然存在。
  • 好吧,我很抱歉,如果它在一个文件中有效,而在另一个文件中无效,那么它们之间存在一些至关重要的区别。我无法在这里重现该问题 - 它对我有用,就像它在您的视图控制器类中一样。如果您不愿意显示更多上下文,我无法帮助您。

标签: ios objective-c enums setter nsobject


【解决方案1】:

在示例项目中,您尝试在类方法中调用 self .. 这是您的问题,而不是枚举。您不能从类方法访问 self 或任何实例变量。

【讨论】:

  • 还有其他方法可以为类方法中的属性设置值吗?还是让方法成为实例方法是唯一的选择?
  • 属性是提供对实例变量的访问的一种方式。所以如果你没有实例,你显然没有实例的变量。根据您的需要,您可以使用静态变量,您可以从实例或类方法访问它。
  • @Isuru 实际上,这正是我在询问上下文时所猜测的情况。这正是我一直要去的地方。您所要做的就是向我展示实际的方法声明。与那些试图帮助你的人合作是个好主意。
  • @Isuru 类可以有多个实例(想象一下,如果不是这种情况——整个程序中只能有一个 NSString!)。如果你尝试在类方法中设置一个属性,它应该设置哪个实例的属性?所以这并不是语言只是强迫你使用实例方法。就是在没有实例的情况下设置实例变量并不意味着
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多