Так что это странно ... у нас есть приложение, написанное на Obj-C, и до любого обновления до iOS 11.3 оно работало нормально. Обновление 11.3 сломало его ... однако с Xcode 9.3 и новым компилятором мы получаем ту же ошибку на любом устройстве. Похоже, что Apple сломала что-то в SDK.
К тому же, похоже, что если бы они действительно что-то сломали в SDK, то у ВСЕХ была бы эта проблема. Так что я обращаюсь к вам, ТАКОЙ разум, чтобы помочь мне понять это!
ПРИМЕЧАНИЕ: Просто чтобы быть предельно ясным: это старое приложение, написанное на Obj-C, а не на Swift, и поддерживающее его только в течение некоторого времени.
Таким образом, нарушающий блок кода очень прост:
- (UINavigationController *)controllerForCategories: (NSArray *)categories titled:(NSString *)title
{
DocumentViewController *dc = [[DocumentViewController alloc]initWithCategories:categories titled:title];
UINavigationController *nc = [[UINavigationController alloc]initWithRootViewController:dc];
[self addChildViewController:nc];
// ERROR HAPPENS ON THIS ^^ LINE
[nc didMoveToParentViewController:self];
[self.contentPanel addSubview:nc.view];
nc.view.frame = self.contentPanel.bounds;
return nc;
}
Теперь, согласно документации Apple, все должно быть в порядке. Если бы мы переопределили addChildViewController (), у нас могла бы быть проблема, но мы не сделали этого, мы просто вызываем метод. Аргумент с именем 'nc' является классом SDK, который расширяет UIViewController, поэтому он является допустимым аргументом для рассматриваемого метода. Однако на 11.3 (или на всех версиях iOS с Xcode 9.3 мы получаем эту ошибку КАЖДЫЙ ВРЕМЯ, которую мы запускаем, на любом устройстве:
2018-04-25 14: 42: 18.792216-0700 Steri-Vac GS [1090: 855706]
- [MasterNavigationViewController _viewControllerSubtreeDidGainViewController:]: нераспознанный селектор отправлен в экземпляр 0x101210100 2018-04-25 14: 42: 18.792662-0700 Steri-Vac
GS [1090: 855706] * Завершение приложения из-за необработанного исключения
NSInvalidArgumentException, причина:
«- [MasterNavigationViewController
_viewControllerSubtreeDidGainViewController:]: нераспознанный селектор отправлен на экземпляр 0x101210100 '
* Первый вызов стека вызовов: (0x186c4b164 0x185e94528 0x186c58628 0x1905c6188 0x186c50b10 0x186b35ccc 0x19029a964 0x19029d2c0
0x100a4941c 0x100a48bec 0x190205a00 0x1902055d8 0x19020c1a4
0x190209404 0x1902782e8 0x100a77a24 0x1902742c4 0x190465bc4
0x19046aa14 0x1907062a8 0x1909de100 0x190705f0c 0x19070676c
0x190e8b7c0 0x190e8b664 0x190bf92cc 0x190d923cc 0x190bf917c
0x1909dd760 0x190469158 0x19087edbc 0x18930e1f0 0x189316af8
0x100bb928c 0x100bc59e4 0x1893427f8 0x18934249c 0x189342a38
0x186bf377c 0x186bf36fc 0x186bf2f84 0x186bf0b5c 0x186b10c58
0x1889bcf84 0x1902695c4 0x100a51994 0x18663056c) libc ++ abi.dylib:
завершается с неисследованным исключением типа NSException
Я подал ошибку в Apple и представил код для ее поддержки, но я подумал, что я должен проверить с умом доверия, чтобы узнать, есть ли у кого-нибудь что-нибудь, на что я мог бы посмотреть в то же время. На данный момент наше приложение бесполезно, и 40% моих специалистов по обслуживанию на местах уже обновились до 11.3, поэтому для нас это становится критической проблемой.
Заранее спасибо, ребята!