Проблема с установкой значения класса, к которому обращаются в Objective-C - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть 2 контроллера представления и переход между ними, который я запускаю программно.

В первом контроллере вида хранятся некоторые данные, хранящиеся в self.myCustomProperty, которые необходимо передать второму контроллеру. Второй контроллер представления с именем класса MyTableViewController, который наследуется от UITableViewController, имеет свойство customData, которое также подразумевает соответствующий метод установки setCustomData:somedata.

Первый контроллер представления выполняет переход к определенному событию:

[self performSegueWithIdentifier:@"MyCustomSegue" sender:self];

который начинает это:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if( [segue.identifier isEqualToString:@"MyCustomSegue"] ){
        MyTableViewController *destinationController = segue.destinationViewController;

        [destinationController setCustomData:self.myCustomProperty];
    }
 }

Проблема в том, что [destinationController setCustomData:self.myCustomProperty] вызывает:

'NSInvalidArgumentException', причина: '- [UITableViewController setCustomData:]: нераспознанный селектор, отправленный экземпляру 0x ...

После проверки проблемы я заметил, что переменная destinationController имеет класс UIViewController class вместо MyTableViewController. Я предполагаю, что исключение выдается, потому что UIViewController не имеет свойства customData.

Некоторое время я искал в Интернете, но я не нашел упоминаний о таких проблемах и не нашел способа превратить UIViewController в MyTableViewController. Единственный способ сделать последнее, что я нашел, это object_setClass(id obj, Class cls), но его использование может вызвать серьезные проблемы.

Как мне решить проблему?

1 Ответ

0 голосов
/ 05 сентября 2018

Ваша ошибка говорит:

'NSInvalidArgumentException', причина: '- [ UITableViewController setCustomData:]: нераспознанный селектор, отправленный экземпляру 0x ...

Обратите внимание, что имя класса в этом сообщении об ошибке UITableViewController, а не имя для вашего конкретного класса. Это контрольный признак того, что вы забыли установить базовый класс для вашей сцены раскадровки. Он использует значение по умолчанию UITableViewController, а не ваш конкретный подкласс. И база UITableViewController явно не знает, что делать с методом setCustomData.

Установите базовый класс для вашей сцены раскадровки, и это должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...