Я только что перенес свой проект из Swift 3.0 в Swift 4.2, и я начал получать эту ошибку.
Этот же метод вызывается из нескольких классов, но только один вызывает исключение. Есть идеи, что могло измениться в одном классе во время миграции Swift, что может быть причиной этой проблемы?
2020-03-04 09: 53: 42.552405-0500 Lake Observer [13974: 1234549] - [Lake_Observer. причина: '- [Lake_Observer.LocationChangeController reusablePickerViewController: didChooseValue: forCtrl:]: нераспознанный селектор, отправленный экземпляру 0x1040ca800'
Здесь происходит исключение. (RecorderReusablePicker)
- (void) buttonIsPressed:(UIButton *)paramSender{
NSMutableArray *retArray = [[NSMutableArray alloc] initWithCapacity:array.count];
for (int i = 0; i < array.count; i++) {
[retArray addObject:[NSNumber numberWithInteger:[genericPicker selectedRowInComponent:i]]];
}
[callingReference reusablePickerViewController:self didChooseValue:[[RecorderReusableResult alloc] initWithArray:retArray clearValue:NO] forCtrl:callingControlReference];
}
Пикер создается здесь. (LocationChangeController)
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if (textField == editTextWaterBody) {
let waterbodyArray: NSArray? = NSArray(objects: waterbodyNames)
self.view.window?.rootViewController?.present(RecorderReusablePicker (dataArray: waterbodyArray as? [Any], widthArray: nil, inInitialIndexArray: [savedWaterbodyIndex], reference: self, andControlRef: editTextWaterBody, andTitle: "Please select your waterbody", showSelection: true, allowPanZoom: false), animated: true, completion: nil)
return false
}
return true
}
И метод при возврате из сборщика.
func reusablePickerViewController(_ reusablePickerViewController: RecorderReusablePicker!, didChooseValue retVal: RecorderReusableResult!, forCtrl outCtrl: Any!) {
reusablePickerViewController.dismiss(animated: true, completion: nil)
}
Опять же, есть и другие классы, которые имеют точно такие же методы для создания и возврата из средства выбора, но только один вызывает исключение.