1

如何避免在 10.7 之前的操作系统版本中添加 NSWindowWillEnterFullScreenNotification 因为它仅在操作系统 10.7 或更高版本中可用,我想在 10.7 以上版本中使用此通知,但如果我在之前的操作系统版本上运行它,我的应用程序会崩溃。我检查了崩溃日志,它说找不到符号 NSWindowWillEnterFullScreenNotification

现在我正在使用这个检查操作系统版本

   if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_5) {
    /* On a 10.5.x or earlier system */
}
else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_6) {
    /* On a 10.6 - 10.6.x system */
}  else  {
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(willEnterFull:)
                                                 name:NSWindowWillEnterFullScreenNotification
                                               object:nil];





    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didExitFull:)
                                                 name:NSWindowDidExitFullScreenNotification
                                               object:nil];
    }

但是应用程序一启动就在以前的版本中崩溃了。

这是崩溃日志,尽管由于 NDA 我在日志中将应用程序名称更改为 XYZ

Process:         XYZ [53319]
Path:            /Applications/XYZ.app/Contents/MacOS/XYZ
Identifier:      com.XYZ.XYZ
Version:         2.0.5 (2.0.5)
Code Type:       X86 (Native)
Parent Process:  launchd [224]

Date/Time:       2012-10-28 07:44:11.717 -0500
OS Version:      Mac OS X 10.6.8 (10K549)
Report Version:  6

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0

Dyld Error Message:
  Symbol not found: _NSWindowDidExitFullScreenNotification
  Referenced from: /Applications/XYZ.app/Contents/MacOS/XYZ
  Expected in: /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
 in /Applications/XYZ.app/Contents/MacOS/XYZ
4

1 回答 1

1

这就是我认为会发生的事情。崩溃已经发生在链接器中,因为它期望NSWindowDidExitFullScreenNotification存在,但它不会在旧版本的 os x 中。

我没有这方面的经验。解决方案似乎有点老套。

看看这个问题,有人有一个几乎完全相同的问题:
How to build a back-compatible OS X app, when a new API is present?

于 2012-11-07T12:48:33.047 回答