-4

这是我的 h 文件:

#import <Foundation/Foundation.h>

@interface Base : NSObject

@end

这是我的 m 文件:

#import "Base.h"
@interface Base()
@property (nonatomic) int number;
@end

@implementation Base

-(void) setNumber: (int) p_number
{
    self.number = p_number;
}

@end

这就是我想要完成的 h 文件:

#import <Foundation/Foundation.h>
#import "Base.h"

@interface Derived : Base

@end

并在 m 文件中执行此操作

#import "Derived.h"

@implementation Derived

- (void) foo
{
    self.number= 7;
}

@end

这当然会导致错误,请使用允许我在不将定义放入 h 文件中的情况下调用基本属性的代码进行回答

谢谢

4

2 回答 2

4

要求人们只用代码回答不是一个好主意。为什么不要求解释什么是错误的,以便您将来自己修复此错误大量类似错误?

这里的问题是您没有在基本标头中声明您的属性。如果您不想这样做,可以在子类的实现文件中将其声明为基类的扩展:

派生的.m

#import "Derived.h"

@interface Base () 
@property (nonatomic) int number;
@end

@implementation Derived

- (void) foo
{
    self.number= 7;
}

@end
于 2013-03-11T11:39:40.720 回答
1

您可以使用 Apple 使用的相同方法UIGestureRecognizerSubclass.h

例如创建

// BaseSubclass.h

@interface Base (ForSubclassEyesOnly)

@property (nonatomic, assign) NSInteger number;

@end

您需要使用以下命令使编译器静音

@implementation Base (ForSubclassEyesOnly)

@dynamic number;

@end

现在任何想要使用这些属性/调用方法的类都只包含这个头。

例如

#import "Derived.h"
#import "BaseSubclass.h"

@implementation Derived

- (void) foo
{
  self.number = 7;
}

@end
于 2013-03-11T12:30:06.130 回答