У меня есть класс «BSjax», который я написал и который позволяет мне выполнять асинхронные вызовы на наш сервер для получения наборов результатов json и т. Д. С использованием класса ASIHTTPRequest. Я настроил его так, чтобы класс BSjax анализировал ответ json моего сервера, а затем передает управление обратно в вызывающий контроллер представления через этот вызов:
[[self delegate] performSelectorOnMainThread:@selector(bsRequestFinished:) withObject:self waitUntilDone:YES];
... где "bsRequestFinished" - это метод обратного вызова в вызывающем контроллере представления. Все это работало хорошо и хорошо, пока я не понял, что некоторым страницам нужно будет делать разные типы запросов ... т.е. я хочу делать разные типы вещей в этой функции обратного вызова в зависимости от того, какой тип запроса был сделан.
Мне кажется, что возможность передавать разные имена функций обратного вызова в мой класс BSjax было бы самым чистым исправлением ... но у меня возникли проблемы (и я даже не уверен, если это возможно) передать переменную, которая содержит имя функции обратного вызова, а затем замените вышеуказанный вызов чем-то вроде этого:
[[self delegate] performSelectorOnMainThread:@selector(self.variableCallbackFunctionName) withObject:self waitUntilDone:YES];
... где «self.variableCallbackFunctionName» устанавливается вызывающим контроллером представления, когда он вызывает BSjax для создания нового запроса.
Это вообще возможно? Если да, то желательно? Если нет, альтернативы?
РЕДАКТИРОВАТЬ: Обратите внимание, что при любом исправлении, которое я получу, нужно будет учитывать реальность того, что этот класс выполняет асинхронные запросы ... поэтому я должен убедиться, что обработка функции обратного вызова правильно привязана к конкретным запросам. ... поскольку я не могу полагаться на последовательность обработки FIFO.
РЕДАКТИРОВАТЬ 2: похоже, что передача переменной типа SEL - это путь? Сейчас я борюсь с тем, чтобы выяснить синтаксис для сохранения его как сохраненного свойства класса BSjax.