Backward compatibility of Xcode OSX

2019-01-26 18:44发布

问题:

How to use features such as viewDidLoad or appDidBecomeActive in Xcode 4.6.1 for OSX 10.8, which are available only for OSX 10.10 and above. Please suggest the alternative ways to use these functions.

回答1:

To expand on Ken Thomas's comment; this is the code that I use:

- (void)loadView
{
    [super loadView];

    // if we're running on 10.8 or older…
    if (NSAppKitVersionNumber <= NSAppKitVersionNumber10_8) {
        [self viewDidLoad]; // call viewDidLoad (added in 10.9)
    }
}

//
// This will be called by loadView pre-10.9; directly otherwise
//
- (void)viewDidLoad {
    // --- YOUR CODE HERE ---
}   // viewDidLoad


回答2:

I'd override setView

@interface MyViewController : NSViewController 
@end

@implementation MyViewController 
- (void)setView:(NSView*)v {
    super.view = v;
    // if we're running on 10.8 or older…
    if (NSAppKitVersionNumber <= NSAppKitVersionNumber10_8) {
        [self viewDidLoad]; // call viewDidLoad (added in 10.9)
    }
}
@end