UIBarButtonSystemItemPageCurl

UIBarButtonSystemItemPageCurl

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

注意:UIBarButtonSystemItemPageCurl在iOS 4.0及更高版本上存在。我也针对iOS 3.1.3。不用担心目标iOS 3部分。

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



if ((UIBarButtonSystemItemPageCurl) == TRUE)

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

最佳答案

如果查看UIBarButtonItem.h,会发现UIBarButtonSystemItemPageCurl是使用预处理器有条件定义的:

typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
    ⋮
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    UIBarButtonSystemItemPageCurl,
#endif
};


…_MAX_ALLOWED被定义为SDK版本。一旦定义了常量,该常量将始终存在。

将它与NULL进行比较是没有意义的,因为这不是指针。您正在有效地将它与零进行比较,因为它不是枚举中的第一件事,所以它不是零,因此它永远不会是NULL

它是一个整数。 UIBarButtonSystemItemPageCurl23是同义词,并且无论操作系统版本如何,数字23始终存在。

因此,问题就变成“ UIKit会识别出UIBarButtonSystemItemPageCurl(又称23)吗?”

发现这种情况的一种方法是将其传递给initWithBarButtonSystemItem:target:action:并查看会发生什么。希望它将返回nil或引发异常。无论哪种方式,您都可以通过在iOS 3设备上执行任何操作来检测到并恢复。

另一种方法是ask the device for its systemVersion并将其与@"4.0"进行比较,以了解版本号。 Growl项目具有code for parsing and comparing version number strings。它是为OS X编写的,但在iOS上几乎不需要修改就可以工作。

我将首先尝试并尝试。仅当它无声地失败时(即即使在iOS 3上也始终返回UIBarButtonItem,并且您在3上获得的项目才行不通),您应该诉诸于比较OS版本。

10-08 05:28