-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

コードだけで答えるように人々に求めるのは良い考えではありません。このエラーと同様のエラーを将来自分で修正できるように、何が問題なのか説明を求めてみませんか?

ここでの問題は、ベースヘッダーでプロパティを宣言しないことです。これを行いたくない場合は、サブクラスの実装ファイルで基本クラスの拡張として宣言できます。

Derived.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 に答える