Возможная авария при загрузкеNibNamed на устройствах джейлбрейка [UIDeviceRGBColor superview]: непризнанный селектор

Мой код выглядит следующим образом:

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 как комментарий в приведенном выше коде.

Я удивляюсь, что высота НЕ 568 для 5/5s, так как мое приложение поддерживает ориентацию Портрет. У меня сотни активных пользователей, и только 4 аварии произошли у 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]

Ссылка на отчет о сбое показывает причину, но я не могу понять, почему, поскольку я использую только встроенные UILabel, UIImageView, UITextView в файле nib.

Может ли кто-нибудь дать мне несколько советов, чтобы лучше проверить и использовать ли 4-дюймовый экран на устройствах для джейлбрейка? Второй вопрос: что вызвало сбой внутри loadNibNamed?

Ответ 1

Я подозреваю, что Cydia Tweak "Eclipse" имеет ошибку переизбытка. (Eclipse.dylib указан в вашей аварии)

Выводится экземпляр UIView из вашего NIB, а память используется повторно для экземпляра UIDeviceRGBColor.

Посмотрите, можете ли вы повторить с добавлением Cydia Eclipse? Вы можете проследить свои ассигнования с помощью инструментов.

Ответ 2

Использовать основной экран UIScreen

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

Я думаю, что это не имеет никакого отношения к jb.

Ответ 3

Предложение 1:

  • Не приравнивайте float к 568.0f. Просто проверьте, больше ли это 567 и менее 1024

Предложение 2: