我需要添加一个实例变量和两个使用该实例变量的方法到UIViewController。我在类扩展中为变量添加了一个属性。然后我为UIViewController创建了一个具有方法名称的类别。类别头文件导入类扩展名。
要使用该类别,我将在我自己的自定义视图控制器中导入它。 但是,当我调用其中一个类别方法(使用扩展中声明的属性)时,它会崩溃。
我可以通过在UIViewController的子类中合成属性来解决这个问题,但我认为这些应该是自动合成的。
我错过了什么吗?
#import <UIKit/UIKit.h>
#import "CustomObject.h"
@interface UIViewController ()
@property (nonatomic, strong) CustomObject *customObject;
@end
#import <UIKit/UIKit.h>
#import "UIViewController_CustomObject.h"
@interface UIViewController (CustomObject)
- (void)customMethod;
@end
#import "UIViewController+CustomObject.h"
@implementation UIViewController (CustomObject)
- (void)customMethod
{
[self.customObject doSomething];
}
@end
答案 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