我的代码如下所示:
CGRect screenRect = [[UIScreen mainScreen] bounds];
SomeView *infoView;
if(screenRect.size.height != 568.0){
// iPhone 5/5s users crash in the next line
infoView = [[[NSBundle mainBundle] loadNibNamed:@"SomeViews" owner:self options:nil] objectAtIndex:1];
}else{
infoView = [[[NSBundle mainBundle] loadNibNamed:@"SomeViews" owner:self options:nil] objectAtIndex:0]
}
但是,我从 Crashlytics 获得了一些针对 iPhone 5/5s 用户的崩溃报告,作为上述代码中的注释。
我很惊讶 5/5s 的高度不是 568,因为我的应用程序只支持纵向方向。我有数百个活跃用户,只有 4 个用户发生了 12 次崩溃。
即使 iPhone 5/5s 设备加载了错误的笔尖(对于 3.5 英寸屏幕),它也不应该导致崩溃。(我刚刚测试过。)
http://crashes.to/s/1ddc169b801
Crashlytics 还向我展示了 90% 的崩溃发生在越狱设备上,这让我想知道越狱设备是否可以以任何方式改变这个值?
Fatal Exception: NSInvalidArgumentException
-[UIDeviceRGBColor superview]: unrecognized selector sent to instance 0x14732db0
0
CoreFoundation
__exceptionPreprocess + 130
1
libobjc.A.dylib
objc_exception_throw + 38
2
CoreFoundation
-[NSObject(NSObject) doesNotRecognizeSelector:] + 202
...
22
UIKit
-[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 138
23
Banck
BKAddRecordPagingViewController.m line 244 // line 244 is loadNibNamed
-[BKAddRecordPagingViewController viewDidLoad]
崩溃报告链接显示了原因,但我不知道为什么,因为我在 nib 文件中只使用了内置的 UILabel、UIImageView、UITextView。
谁能给我一些建议以更好地检查以及是否在越狱设备上使用 4 英寸屏幕?第二个问题是导致 loadNibNamed 内部崩溃的原因是什么?