5

我需要向 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;

@结尾

UIViewController+CustomObject.m(分类实现)

 #import "UIViewController+CustomObject.h"

 @implementation UIViewController (CustomObject)

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

@结尾

4

1 回答 1

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
于 2013-02-06T11:42:19.483 回答