检测热点在 iPhone X 内崩溃
Detect hotspot crashed in iPhone X
我在 viewDidLoad 中有如下示例代码来检测热点开/关。它在 iPhone 6-8 中正常工作,但在 iPhone X 中崩溃。
UIApplication *app = [UIApplication sharedApplication];
if(![[app valueForKey:@"statusBar"] valueForKey:@"doubleHeightLabel"])
{
//Some code here
}
else
{
//Some code here
}
显示的错误消息:-
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIStatusBar_Modern 0x7ffed341b7f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key doubleHeightLabel.'
有什么想法吗?
它崩溃是因为 Apple 更改了键 "statusBar" 持有的对象。它不再有键为 "doubleHeightLabel" 的对象。正如评论中所述,由于这个问题,Apple 禁止使用 private API 。当他们升级 iOS 版本时,他们会随心所欲地更改 "statusBar" 对象,因此键可能会丢失或更改,甚至可以保存一个完全不同的变量。
解决方案:不要使用 private API。做个好人,听苹果的。
有一种方法可以检查 CNCopyCurrentNetowrkInfo 当前的网络信息。
还有技巧:
Obj-c:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
Swift:
let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
启用个人热点后,它 returns 40,否则 returns 20。
请注意 它不适用于 iPhone X+
我在 viewDidLoad 中有如下示例代码来检测热点开/关。它在 iPhone 6-8 中正常工作,但在 iPhone X 中崩溃。
UIApplication *app = [UIApplication sharedApplication];
if(![[app valueForKey:@"statusBar"] valueForKey:@"doubleHeightLabel"])
{
//Some code here
}
else
{
//Some code here
}
显示的错误消息:-
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIStatusBar_Modern 0x7ffed341b7f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key doubleHeightLabel.'
有什么想法吗?
它崩溃是因为 Apple 更改了键 "statusBar" 持有的对象。它不再有键为 "doubleHeightLabel" 的对象。正如评论中所述,由于这个问题,Apple 禁止使用 private API 。当他们升级 iOS 版本时,他们会随心所欲地更改 "statusBar" 对象,因此键可能会丢失或更改,甚至可以保存一个完全不同的变量。
解决方案:不要使用 private API。做个好人,听苹果的。
有一种方法可以检查 CNCopyCurrentNetowrkInfo 当前的网络信息。
还有技巧:
Obj-c:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
Swift:
let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
启用个人热点后,它 returns 40,否则 returns 20。
请注意 它不适用于 iPhone X+