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



我的代码如下:

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/5秒的高度不是568,因为我的应用程序只支持纵向。我有数百个活跃用户,只有12个崩溃发生在4个用户身上。

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

我怀疑Cydia Tweak"Eclipse"有一个过度发布错误。(Eclipse.dylib列在您的崩溃跟踪中)

NIB中UIView的一个实例正在释放,并且内存被重新用于UIDeviceRGBColor实例。

看看你是否可以用Cydia Eclipse插件重新编程?您可以通过Instruments追踪您的分配情况。

使用UIScreen主屏幕

CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {
// code for 4-inch screen
} else {
// code for 3.5-inch screen
}

我认为这与jb无关。

建议1:

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

建议2:

  • 这个代码库有一个非常直接的方法来检测各种iOS设备。——https://github.com/froztbytes/UIDeviceHardware

相关内容

  • 没有找到相关文章

最新更新