objective-c - respondsToSelector - 不工作

标签 objective-c ios6 uinavigationbar ios7 respondstoselector

我已经阅读了大约 10 篇文章,但还没有发现我的实现有什么问题。

这个应用程序是用 iOS 6 编写的,但更新到了 iOS7,所以我想提供对 iOS6 和 iOS7 的支持。但如果我在 iOS6 设备上运行仅适用于 iOS7 的方法,它就会崩溃。 所以我想到添加respondsToSelector,以检查它是否有iOS7,但由于某种原因,if总是返回false。

AppDelegate.m:

if ([[UINavigationBar appearance] respondsToSelector:@selector(shadowImage)])

if ([[UINavigationBar appearance] respondsToSelector:@selector(setShadowImage:)])

有人可以告诉我我做错了什么吗?

编辑:我尝试将部署目标设置为 iOS6 和 iOS7,两种情况都返回 false。

Edit2:如果我删除 if 语句并调用该方法,它会按 iOS7 中的预期工作。

最佳答案

无需查询[UINavigationBar外观]来获取选择器,只需

[UINavigationBar instancesRespondToSelector:@selector(shadowImage)]

另一种解决方案可能是检查 iOS 版本

if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
    NSLog(@"iOS >= 7.0");

关于objective-c - respondsToSelector - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18953705/

相关文章:

objective-c - iOS6 和 ACAccount : Twitter type disappears?

jquery - 是否可以强制 Ios 浏览器焦点从输入转移到另一个元素?

ios - 在 Swift 中更改导航栏中的字体

swift - 自定义 iOS 导航栏

ios - UINavigationBar 不会扩展或扩展到设备宽度

ios - 为什么无法捕获此iOS AWS开发工具包网络错误?

ios - uitableview 默认图像显示不同大小?

objective-c - 找不到适用于应用程序的有效 'aps-environment' 权利字符串

ios - 从 PerformBlock NPSPrivateQueueConcurrencyType 调用的方法中的 FetchRequest 失败

ios - OpenUDID 或 Mac 地址在 IOS 上选择?