Как использовать такие функции, как viewDidLoad
или appDidBecomeActive
в Xcode 4.6.1 для OSX 10.8, которые доступны только для OSX 10.10 и выше. Пожалуйста, предложите альтернативные способы использования этих функций.
Обратная совместимость Xcode OSX
Ответы (2)
Чтобы расширить комментарий Кена Томаса; это код, который я использую:
- (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
person
geowar
schedule
12.05.2015
Спасибо за совет. Есть ли причина вызывать
[super viewDidLoad];
из производного класса?
- person ATV; 17.07.2015
Это будет зависеть от того, реализует ли суперкласс метод viewDidLoad. Чтобы быть параноиком, вы можете использовать instancesRespondToSelector в суперклассе, чтобы определить, реализован ли он там. Примечание: отправка responsesToSelector: в super эквивалентна отправке самому себе. Вместо этого вы должны вызвать метод instancesRespondToSelector класса NSObject: вы не можете просто использовать [[self superclass] instancesRespondToSelector:@selector(aMethod)], поскольку это может привести к сбою метода, если он вызывается подклассом.
- person geowar; 17.07.2015
Разве это не должно быть
NSAppKitVersionNumber <= NSAppKitVersionNumber10_9
, поскольку заголовок указывает, что viewDidLoad
не было добавлено до 10.10.
- person spinacher; 29.04.2016
В качестве альтернативы явная проверка версии может быть заменена на
if (![NSViewController instancesRespondToSelector:@selector(viewDidLoad)])…
.
- person spinacher; 29.04.2016
Я бы переопределил 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
person
Daij-Djan
schedule
14.10.2015
-viewDidLoad
просто переопределите-loadView
. Позвоните наsuper
, а затем введите любой дополнительный код после этого. Это фактически просмотр-загрузка кода. Что касаетсяappDidBecomeActive
, похоже, он не является частью какого-либо Cocoa API. Где вы это нашли? - person Ken Thomases   schedule 11.05.2015appDidBecomeActive
, вы имеете в видуapplicationDidBecomeActive:
? Это было частью OS X с 10.0. - person JWWalker   schedule 12.05.2015