Возможная авария при загрузке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: