1

我有一个针对 10.5 SDK 构建的应用程序。我仍然希望它在 10.7 系统上运行时能够正常运行。代码片段

if ([window respondsToSelector:@selector(setRestorable:)])
{
  [window setRestorable:NO];
}

但是,会触发编译器警告

'NSWindow' may not respond to '-setRestorable:'

因为在 10.7 SDK 中引入了 setRestorable 选择器。解决此问题的正确方法是什么?

4

3 回答 3

2

尝试在某些标头中创建一个虚拟(从未使用过)协议,并确保将其导入到您使用它的源中:

@protocol Compatibility
- (void)setRestorable:(BOOL)flag;
@end

我相信这应该让编译器相信该类可能会实现该协议(即使没有在其标头中明确指定)并且应该停止抱怨。

于 2012-05-21T15:46:10.093 回答
0

我发现的一种可能性是:

if ([window respondsToSelector:@selector(setRestorable:)])
{
  IMP setRestorableFunc =
    [window methodForSelector:@selector(setRestorable:)];

  setRestorableFunc(window, @selector(setRestorable:), NO);
}

不过,不确定这是否是最佳选择。

于 2012-05-21T15:59:50.887 回答
0

只需将其转换为id

if ([window respondsToSelector:@selector(setRestorable:)])
{
  [(id)window setRestorable:NO];
}
于 2012-06-04T21:13:24.267 回答