如果您查看 UIBarButtonItem.h,您会发现它UIBarButtonSystemItemPageCurl
是使用预处理器有条件地定义的:
typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
⋮
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
UIBarButtonSystemItemPageCurl,
#endif
};
…_MAX_ALLOWED
定义为 SDK 版本。一旦定义了常量,常量就一直存在。
比较它NULL
是没有意义的,因为这不是一个指针。您实际上是将它与零进行比较,并且由于它不是枚举中的第一件事,因此它不是零,所以它从不NULL
。
它是一个整数。UIBarButtonSystemItemPageCurl
是 的同义词,并且无论操作系统版本如何,23
该数字始终存在。23
所以问题变成了“是UIBarButtonSystemItemPageCurl
(又名23
)UIKit 会识别的东西吗?”</p>
找到它的一种方法是将它传递给initWithBarButtonSystemItem:target:action:
并看看会发生什么。希望它会返回nil
或抛出异常;无论哪种方式,您都可以通过在 iOS 3 设备上执行您需要执行的任何操作来检测并恢复。
另一种方法是向设备询问它systemVersion
@"4.0"
并以能够理解版本号的方式进行比较。Growl 项目有用于解析和比较版本号字符串的代码。它是为 OS X 编写的,但在 iOS 上几乎不需要修改即可工作。
我会先做试试看的方法。只有当它静默失败(即,总是返回 UIBarButtonItem,即使在 iOS 3 上,并且您在 3 上获得的项目不起作用)时,您才应该求助于比较操作系统版本。