0

我正在尝试检查UIBarButtonSystemItemPageCurl给定设备上是否存在。

注意:UIBarButtonSystemItemPageCurl存在于 iOS 4.0 及更高版本。我的目标也是 iOS 3.1.3。不要担心目标 iOS 3 部分。

目前尝试: if (UIBarButtonSystemItemPageCurl != NULL)

if ((UIBarButtonSystemItemPageCurl) == TRUE)

检查常量的存在(被UIBarButtonSystemItemPageCurl认为是常量吗?它是 的值typedef enum UIBarButtonSystemIcon)。这两种方法目前都不起作用。有人可以提供有关检查结构(而不​​是包含结构)中是否存在值的指导吗?谢谢。

4

1 回答 1

2

如果您查看 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 上获得的项目不起作用)时,您才应该求助于比较操作系统版本。

于 2013-02-18T04:58:35.640 回答