2

我的代码如下所示:

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

4

3 回答 3

2

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

正在释放您的 NIB 中的 UIView 实例,并为UIDeviceRGBColor实例重用内存。

看看您是否可以使用 Cydia Eclipse 插件进行复制?您可以使用 Instruments 跟踪您的分配。

于 2014-03-12T18:16:05.740 回答
0

使用 UIScreen mainScreen

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

我认为这与jb无关。

于 2014-02-24T14:09:33.820 回答
0

建议一:

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

建议二:

于 2014-03-12T14:13:20.260 回答