1

Objective-Cには保護されたメソッドがないことがわかりました。これが私の問題です。共有される多くの機能とプロパティを持つ 2 つの viewController があります。のビジョンは、共有メソッドとプロパティを保持する BaseViewController を持つことでした。そこから、同じ変数を使用しながら、2 つのクラスが必要な機能を継承してオーバーライドします 。 hファイル

私の質問を明確にするために、コードを追加しています:)

@interface BaseViewController ()
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *uiButtons;
- (void)setBtns:(NSArray *)p_btns; //tried with & without this line
@end

@implementation BaseViewController
- (void)setBtns:(NSArray *)p_btns {
    uiButtons = p_btns;
    //do something generic with the buttons (set font, image etc.)
}
@end

@interface DerivedViewController ()
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *buttonsConnectedToTheActualView;
@end

@implementation DerivedViewController
- (void) setBtns:(NSArray *)p_btns {
    [super setBtns:p_btns];
    //do something specific with the buttons (decide if they face up or down according to this class logic)
}
@end

を呼び出すと[super setBtns:p_btns];エラーが発生します。

DerivedGameViewController.m:No visible @interface for 'BaseViewController' declares the selector 'setBtns:'

どうすればこれを達成できますか?誰かがスニペットを投稿したり、私の間違いを指摘したりできますか (コードまたはコンセプトで)。

4

1 に答える 1

4

カテゴリで宣言された保護されたメソッドを使用して2番目のヘッダーを作成するだけです。ヘッダーに適切な名前を付けて文書化します。

UIGestureRecognizer.hおよびUIGestureRecognizerSubclass.hは、例としてサーバーを提供する場合があります。

于 2013-03-04T22:31:46.913 に答える