0

我有一个类 ( SomeClass),我正在扩展并添加一个属性 ( propOne)。我还想CategoryName在这个类上添加一个类别()来创建一个修改扩展中添加的属性的方法。

我收到编译器错误消息说[SomeClass setPropOne:] unrecognized selector...

我对objective-c很陌生-在类别中创建的方法如何修改通过扩展添加的属性?

我认为我想要做的最好用代码解释:

@interface SomeClass ()

@property (nonatomic,weak) id propOne

@end

...
...


@implementation SomeClass (CategoryName)

- (void)someMethodWithParam:(id)param
{
 self.propOne = param;
}

@end
4

3 回答 3

0

@property开箱即用无法添加到类别中。但是,有一种解决方法涉及创建如下内容:

static const char kMyChar;

并通过以下方式将其绑定到类别(使其成为“关联对象”):

objc_setAssociatedObject(self, &kMyChar, alertWrapper, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

在这里查看一个“添加属性”到基于块的UIAlertView类别的好示例的完整文档......

于 2013-10-11T18:39:14.003 回答
0

只有在编译实现时类扩展是可见的,自动合成机制才能合成在类扩展中声明的属性。因此,如果您的示例中显示的类扩展位于SomeClass.hSomeClass.m中,则该属性将被合成。

否则,类扩展为(至少在这种情况下)不存在的属性提供声明,这就是为什么您在尝试访问它时会看到运行时异常。要解决这个问题,您可以在SomeClass (CategoryName)类别中自己实现访问器方法。

您可能面临的问题是,给定的类无法将实例变量添加到另一个类。请参阅 Alfie Hansen 的回答,了解可能的解决方法。

于 2013-10-11T21:35:30.993 回答
0

实现通过使用关联对象来做你想做的事。
https://github.com/kissrobber/DProperty

于 2014-03-04T04:00:49.100 回答