Допустим, я создаю новый проект. Теперь я добавляю два текстовых поля в контроллер представления в Интерфейсном Разработчике. Я хочу отвечать на события делегата, создаваемые текстовыми полями, однако я не хочу, чтобы контроллер основного вида выступал в качестве делегата для обоих текстовых полей. В идеале я хочу отдельный файл для каждого текстового поля, которое выступает в качестве делегата. Каждый из этих объектов также должен иметь возможность взаимодействовать с контроллером основного вида.
У меня вопрос, как бы я это настроил и все правильно связал?
Я попытался создать новый класс, который наследуется от NSObject и реализует UITextFieldDelegate. Затем я добавил переменную экземпляра с именем «viewController» того же типа, что и мой контроллер представления, и пометил его с помощью IBOutlet (для этого мне понадобилось добавить #import «myViewcontroller.h»).
Затем я подошел к Интерфейсному Разработчику и открыл свой контроллер представления, который содержит два поля редактирования. Я добавил объект NSObject в форму и изменил его тип на новый созданный класс. Я установил его свойство viewController на Владелец файла и установил одно из свойств делегата текстового поля, чтобы оно указывало на этот новый объект, который я создал.
Теперь, когда я запускаю программу, она падает, когда я касаюсь текстового поля. Выдает ошибку EXC_BAD_ACCESS. Я предполагаю, что я не связал вещи правильно в IB.
Некоторые вещи, в которых я не уверен, в чем может быть проблема:
Знает ли IB автоматически, что нужно создать экземпляр класса, просто поместив объект NSObject в ViewController? Может ли он должным образом назначить свойство viewController самому экземпляру, даже если он создает себя в то же время? Может быть, проблема в том, что этот новый объект ничем не удерживается?