类扩展中变量属性的自动合成

时间:2012-11-15 14:53:57

标签: iphone objective-c xcode

我需要添加一个实例变量和两个使用该实例变量的方法到UIViewController。我在类扩展中为变量添加了一个属性。然后我为UIViewController创建了一个具有方法名称的类别。类别头文件导入类扩展名。

要使用该类别,我将在我自己的自定义视图控制器中导入它。 但是,当我调用其中一个类别方法(使用扩展中声明的属性)时,它会崩溃。

我可以通过在UIViewController的子类中合成属性来解决这个问题,但我认为这些应该是自动合成的。

我错过了什么吗?

UIViewController_CustomObject.h(扩展标头)

 #import <UIKit/UIKit.h>
 #import "CustomObject.h"

 @interface UIViewController ()

 @property (nonatomic, strong) CustomObject *customObject;

 @end

UIViewController + CustomObject.h(类别标题)

 #import <UIKit/UIKit.h>
 #import "UIViewController_CustomObject.h"

 @interface UIViewController (CustomObject)

 - (void)customMethod;

@end

UIViewController + CustomObject.m(类别实现)

 #import "UIViewController+CustomObject.h"

 @implementation UIViewController (CustomObject)

 - (void)customMethod
 {
      [self.customObject doSomething];
 }

@end

1 个答案:

答案 0 :(得分:1)

我建议只使用类别和相关对象。

<强>的UIViewController + CustomObject.h

#import <UIKit/UIKit.h>
#import "CustomObject.h"

@interface UIViewController (CustomObject)
@property (nonatomic, strong) CustomObject *customObject;

- (void)customMethod;

@end

<强>的UIViewController + CustomObject.m

#import <objc/runtime.h>
#import "UIViewController+CustomObject.h"

static char customObjectKey;

@implementation UIViewController (CustomObject)

- (CustomObject *)customObject{
    CustomObject *_customObject= objc_getAssociatedObject(self, &customObjectKey);
    return _taskDateBarView;
}

- (void)setCustomObject :(CustomObject *)_customObject{
    objc_setAssociatedObject(self, &customObjectKey, _customObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (void)customMethod
{
     [self.customObject doSomething];
}

@end