Я использую код OverlayViewController из https://github.com/agordeev/OverlayViewController в проекте.
В этом коде есть протокол и расширение, которое добавляет реализацию для протоколов двумя методами:
protocol OverlayHost {
func showOverlay<T: OverlayViewController>(type: T.Type, storyboardName: String) -> T?
func showOverlay<T: OverlayViewController>(identifier: String, storyboardName: String) -> T?
}
extension OverlayHost where Self: UIViewController {
@discardableResult
func showOverlay<T: OverlayViewController>(type: T.Type, fromStoryboardWithName storyboardName: String) -> T? {
let identifier = String(describing: T.self)
return showOverlay(identifier: identifier, fromStoryboardWithName: storyboardName)
}
@discardableResult
func showOverlay<T: OverlayViewController>(identifier: String, fromStoryboardWithName storyboardName: String) -> T? {
let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
guard let overlay = storyboard.instantiateViewController(withIdentifier: identifier) as? T else { return nil }
overlay.presentOverlay(from: self)
return overlay
}
}
Когда я пытаюсь представить оверлей (UIViewController в раскадровке), ничего не происходит.В исследовании я заметил, что когда код выше создает объект UIStoryboard, я получаю сообщение об ошибке:
let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
выдает ошибку:
expression produced error: error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x5a10432956f).
The process has been returned to the state before expression evaluation.
Если я вызываю упомянутую строкуза пределами расширения я не вижу этой ошибки.
Еще один момент, который может иметь или не иметь значение, заключается в том, что вызов метода в расширении, где возникает ошибка, происходит от метода в расширенииродитель:
extension MenuViewController: UITableViewDelegate {
...
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 2 {
showOverlay(type: OverlayViewController.self, storyboardName: "MenuStoryboard")
}
}
}
Идеи?
Обновление: так что это наложение работает, но я все еще вижу эту ошибку, сообщенную в Xcode.