Question

I now know there is no protected method in Objective-C and here is my problem. I have two viewControllers with many functions and properties that are shared. My vision was to have a BaseViewController holding the shared methods and properties, and from it two classes will inherit and override the needed functionality while using the same variables, I don't wish to convert the shared functions to public by placing them in the .h file

To help clarify my question I'm adding code :)

@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

The call to [super setBtns:p_btns]; raises an error:

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

How can I achieve this? Can someone post a snippet or point to my mistake (in code or concept).

No correct solution

OTHER TIPS

Just create a second header with the protected methods declared in a category. Name and document the header appropriately.

UIGestureRecognizer.h and UIGestureRecognizerSubclass.h may server you as an example.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top