我正在尝试检查给定设备上是否存在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
。它是一个整数。
UIBarButtonSystemItemPageCurl
与23
是同义词,并且无论操作系统版本如何,数字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版本。