我的代码如下所示:
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内部崩溃的原因是什么?
答案 0 :(得分:2)
我怀疑Cydia Tweak" Eclipse"有一个过度发布的错误。 (Eclipse.dylib列在崩溃跟踪中)
正在发布来自NIB的UIView实例,并将内存重用于UIDeviceRGBColor
实例。
看看你是否可以使用Cydia Eclipse添加重命名?您可以使用Instruments跟踪您的分配。
答案 1 :(得分:0)
使用UIScreen主屏幕
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {
// code for 4-inch screen
} else {
// code for 3.5-inch screen
}
我认为它与jb没有任何关系。
答案 2 :(得分:0)
建议1:
建议2: