Ios 目标C:通过安全区域插入检测iPhone X

Ios 目标C:通过安全区域插入检测iPhone X,ios,objective-c,iphone-x,uiedgeinsets,safearealayoutguide,Ios,Objective C,Iphone X,Uiedgeinsets,Safearealayoutguide,我正在尝试检测当前设备是否是Objective-C中的iPhone X。我在Swift中查看了一些其他设备,一个合适的方法似乎是将安全区域插入与UIEdgeInsets.zero进行比较。然而,每当我尝试这样做时,我都会得到nil。我在iOS 11和iPhoneX模拟器上运行这个 当我单步执行此方法时,我输入了第一个子句,但仍然返回一个nil - (BOOL)isiPhoneX { if (@available(iOS 11.0, *)) { return

我正在尝试检测当前设备是否是Objective-C中的iPhone X。我在Swift中查看了一些其他设备,一个合适的方法似乎是将安全区域插入与
UIEdgeInsets.zero进行比较。然而,每当我尝试这样做时,我都会得到
nil
。我在iOS 11和iPhoneX模拟器上运行这个

当我单步执行此方法时,我输入了第一个子句,但仍然返回一个
nil

- (BOOL)isiPhoneX
{   
    if (@available(iOS 11.0, *))
    {
        return UIEdgeInsetsEqualToEdgeInsets(self.safeAreaInsets, UIEdgeInsetsZero);
    }
    else
    {
        return nil;
    }
}

你得到的不是
nil
,而是
NO
<代码>否
可能显示为
nil
,具体取决于您如何看待该值。并且您的逻辑是向后的。对于iPhoneX,安全区域插图将不会为零。对于
BOOL
,不要返回
nil
。在
else
中返回
NO
。链接中有答案。跟踪设备的唯一终极方法是使用
UIDevice
。顺便说一句,为什么你需要知道这个设备是否是iPhoneX?你的应用程序不应该在意是否编写正确。你没有得到
nil
,你得到的是
NO
<代码>否可能显示为
nil
,具体取决于您如何看待该值。并且您的逻辑是向后的。对于iPhoneX,安全区域插图将不会为零。对于
BOOL
,不要返回
nil
。在
else
中返回
NO
。链接中有答案。跟踪设备的唯一终极方法是使用
UIDevice
。顺便说一句,为什么你需要知道这个设备是否是iPhoneX?你的应用程序不应该在意是否编写正确。