Я пытаюсь написать код, который упростит добавление новых функций во внутреннюю сборку инструмента. Существует UITableView с каждой ячейкой, являющейся кнопкой для функции, которая перейдет в другое представление.Как вызвать метод для объекта класса id?
Каждая функция находится в собственном файле класса. В настоящее время я так делаю это.
В контроллере представления, я инициализировать класс в методе, то я непосредственно перейти в его вид контроллера
- (void)resetButtonTouched {
[ResetClass *reset = [[ResetClass alloc] initWithNumber num];
[self.navigationController pushViewController: reset animated: YES];
}
Тогда для cellForRowAtIndexPath создать клетку
cell.textLabel.text = @"Reset";
Тогда в didSelectRowAtIndexPath I создать ответ кнопки
[_viewController resetButtonTouched];
И я делаю это для 10 другие функции, поэтому
[Function2 * function2 = [[Function2 alloc] initWithNumber num]; [Function3 * function3 = [[Function2 alloc] initWithNumber num];
и т.д ...
Я хотел бы упростить это, так что я только должен зарегистрировать класс в одном месте, и она будет автоматически добавлять ячейки и подключить кнопку. Для cellForRowAtIndexPath и didSelectRowAtIndexPath я могу просто заставить его посмотреть в массиве на основе indexPath.row. Но мне нужен способ хранения объектов класса в массиве и инициализация их при вызове.
Я думаю, я могу иметь все функции, которые добавляются сюда, чтобы методы класса, который будет
- возвращение названия (для названия кнопки в cellForRowAtIndexPath)
- имени класса (для NSClassFromString поэтому я могу определить класс объекта класса в массиве)
и нормальный метод, который будет вызываться после инициализации, чтобы сделать свой материал.
Я хочу написать что-то где, если я просто пишу эти две строки,
ResetFunction *reset;
[self registerFunction:reset];
Это будет делать все, что я сделал выше (создать рабочую кнопку, которая вызывает этот объект класса)
Я m думая о наличии массива, который будет хранить все объекты класса, назовите его allFunctions
и метод runFunction
, который будет выполнять инициализацию и переключение. Тогда в cellForRowAtIndexPath
это будет просто
cell.textLabel.text = [allFunctions[indexPath.row] getTitle];
и didSelectRowAtIndexPath он позвонит [_viewController runFunction:allFunctions[indexPath.row]];
Как бы мне это сделать?Я попытался создать метод с параметром id *
, который принимает объект класса, с целью хранения этого в массиве allFunctions
У меня возникли проблемы с созданием метода, который будет хранить все функции, потому что он дает мне «неявное преобразование указатель non-object-c на autoreleasing id запрещен ARC ", когда я пытаюсь вызвать [self registerClass: reset].
Что мне делать?