在越狱设备上的loadNibNamed时可能发生崩溃[UIDeviceRGBColor superview]:无法识别的选择器

时间:2014-02-24 13:37:14

标签: objective-c jailbreak iphone-5 uiscreen loadnibnamed

我的代码如下所示:

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内部崩溃的原因是什么?

3 个答案:

答案 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:

  • 不要将浮动等同于568.0f。检查它是否大于 567且小于1024

建议2: