检查版本特定的全局常量和其他功能的“存在”?

时间:2010-06-23 19:31:52

标签: iphone objective-c

我对iPhone SDK非常陌生。我只是找不到正确的搜索查询来找出如何检查是否存在新的或已弃用的功能。

案例:

iOS4不赞成用于检查键盘高度的 UIKeyboardBoundsUserInfoKey (以及移动,滚动或其他任何调整键盘的高度)。我仍然可以使用它,但我想在3.2及更高版本上使用新的 UIKeyboardFrameEndUserInfoKey ,但对于旧版本的3.x版本仍然可以使用旧的 UIKeyboardFrameEndUserInfoKey

如何确定是否声明 UIKeyboardFrameEndUserInfoKey (全局常量)?我想这是我需要检查的,因为如果在当前操作系统版本的Frameworks中的任何地方都没有定义密钥,我就无法检查字典是否包含密钥。

有关此类版本检查的任何建议都会有所帮助。我相信我也会遇到其他事情。

2 个答案:

答案 0 :(得分:2)

@Martin,这是我解决它的方式。

// Get the size of the keyboard.
NSValue* aValue = nil;

aValue = [info objectForKey:@"UIKeyboardBoundsUserInfoKey"];
if (!aValue) {
    aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
}

通常不建议使用字符串常量来查询字典中的值,但在这种情况下,UIKeyboardBoundsUserInfoKey来自旧版本的iOS,因此它永远不会改变。

答案 1 :(得分:0)

获取操作系统版本可能更有帮助,因为它也可以适用于其他用例。

[[UIDevice currentDevice] systemVersion];

请参阅here

它将返回一个类似@"3.1.2"的字符串,您可以使用它来检查特定于版本的功能。