2017-02-09 8 views
-1

Я не смог найти решение в любом месте этого:Невозможно использовать Swift протокол в Objective класса C, так как это вызывает ошибку сегментации: 11

Мое приложение имеет Swift протоколы и мне нужно реализовать, что в старый класс Objective-C. После реализации протокола, когда я создаю объект класса Objective C, Xcode показывает ошибку сбоя сегментации 11. Копайте в много сообщений, чтобы найти решение, но не получилось.

Чтобы проиллюстрировать эту проблему, я создал демо IOS проекта здесь:

https://github.com/tusharbhatta/SwiftSegmentationFault

UPDATE:

Сделано работа вокруг этой проблемы. Проверьте это на ветке «решена» в вышеупомянутом репо. :)

Но, пожалуйста, помогите, если вы знаете лучшее решение. Большое спасибо

+0

'ошибка ошибки сегментации 11' Пожалуйста, отправьте отчет аварии на Apple. – Moritz

+0

Я загрузил ваш проект и попытался его построить - я заметил, что когда я удаляю HatchbackCar из заголовка моста, проект компилируется. Конечно, тогда я не могу использовать его в коде Swift. Возможно, проблема связана с использованием кода Swift в Obj-c и наоборот. Во всяком случае, это выглядит как ошибка в Xcode. – user3581248

+0

@ Эрик Айя, да, я сделал отчет об ошибке Apple. – Tushar

ответ

0

Получил ответ от инженеров Apple о моем отчете об ошибке на портале отчетности разработчиков Apple Developer, в котором проблема была исправлена ​​в Beta Xcode 8.3, и проект успешно строится. Вот фактический ответ от Apple:

Engineering имеет следующую обратную связь для вас:

Проект успешно строит с Xcode 8.3 бета 2.

Пожалуйста, подтвердите этот вопрос с 8.3 бета Xcode и обновите свою ошибку отчет в https://bugreport.apple.com/ с вашими результатами.

Xcode 8.3 бета 2 (8W120l) https://developer.apple.com/download/ Опубликовано Дата: 6 февраля 2017

Спасибо.

Благодарим вас за помощь в поиске и выявлении ошибок в наших продуктах.

С наилучшими пожеланиями,

Разработчик поддержки Apple, отношения по всему миру разработчиков

0

Я нашел некоторые проблемы с вашим кодом, следуя инструкциям. Надеюсь, это решит вашу проблему.

1). Перейдите в «Настройки сборки» и найдите «Определяет модуль», изменив его значение на «ДА».

2). Перейдите в «HatchbackCar.h», теперь удалите '@protocol CarProtocol;' и «CarProtocol».

3). Теперь ясный проект.

4). Перейдите в «HatchbackCar.m», добавьте следующий код.

@interface HatchbackCar() <CarProtocol> 

@end 

5). Теперь очистите проект еще раз.

6). Построить проект.

+0

Но таким образом нелегко будет использовать объект HatchbackCar в быстром массиве типа CarProtocol, потому что компилятор не может видеть частную реализацию. Например: вар автомобили = [CarProtocol]() пусть hyundaiSantro = HatchbackCar ("Huyndai Santro", колеса: 4) cars.append (hyundaiSantro) – Tushar

+0

я пытался решить ошибку в коде, как вы просили. далее не проверял код. –

+0

Я действительно предлагаю ваше решение для работы в Xcode 8.2. Большое спасибо человеку :) – Tushar