Обратный звонок из статической библиотеки - PullRequest
2 голосов
/ 23 марта 2012

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

Я бы хотел, чтобы моя статическая библиотека использовала только один заголовок, этот заголовок должен содержать такие функции, как:
requestImage: (NSString *) путь;
requestLikstOfSomething: (NSSting *) guid;
и т. Д. *

Эти функции должны выполнить необходимую работу и запустить асинхронное NSURLConnection, иперезвоните в основное приложение, когда вызов закончится.Как вы, ребята, делаете это, каковы наилучшие способы обратного вызова из статической библиотеки после завершения асинхронного метода?Должен ли я сделать это с делегатами (это возможно), уведомлениями, наблюдателями ключ / значение.Я действительно хочу знать, как вы, ребята, решили эту проблему, и что вы считаете лучшими практиками.

У меня будет 20-25 различных вызовов, поэтому я хочу, чтобы файл заголовка статической библиотеки был как можно более простым.предпочтительнее только со списком из 20-25 функций.

ОБНОВЛЕНИЕ:
Мой вопрос не в том, как использовать шаблон делегата, а в том, как лучше всего использовать обратные вызовы из статических библиотек.Я хотел бы использовать делегатов, но я не хочу иметь 20-25 объявлений протокола в общедоступном заголовочном файле.Я бы предпочел иметь только одну функцию для каждого запроса.

Выбранное решение:
Я выбираю решение из erkanyildiz с помощью целевого параметра, я знаю, что это довольно низкоэффективная технология, но это было для менясамое чистое решение.Моей целью было сохранить заголовочный файл как можно меньше.Спасибо всем за их вклад, я, конечно, буду больше искать решение проблем с крупной центральной диспетчеризацией, когда у меня будет время.Решение user1055604 с парой «стандартных» делегатов для ответов также мне нравится.Итак, еще раз спасибо всем за вклад.

Заранее спасибо.С наилучшими пожеланиями Мортен

Ответы [ 4 ]

0 голосов
/ 23 марта 2012

Если вы не хотите иметь одно объявление протокола обратного вызова для каждой функции в вашей статической библиотеке, начните с рассмотрения того, что возвращал бы каждый обратный вызов, если бы вы принудительно реализовали его как обратный вызов.

С этого момента найдите, что общего между ними, и свяжите общие элементы вместе в классе, который будет служить интерфейсом для ответов. Вам может понадобиться еще один такой класс.

В качестве примера посмотрите на NSURLResponse :


NSURLResponse объявляет программный интерфейс для объекта, который обращается к ответу, возвращенному экземпляром NSURLRequest.

NSURLResponse инкапсулирует метаданные, связанные с загрузкой URL-адреса, способом, независимым от протокола и схемы URL-адреса.

Этот класс используется NSURLConnection в его методе делегата didReceiveResponse. В худшем случае вы получите пару обратных вызовов вместо шумного заголовочного файла. Удачного кодирования. : -)

0 голосов
/ 23 марта 2012

Посмотрите здесь пример с делегатами: Как выполнять обратные вызовы в Objective-C .

Не должно иметь значения, что callback выполняется из static library.

Статические библиотеки - это феномен времени компиляции / компоновки.Таким образом, вызовы статических библиотек to и from within прозрачны для приложения во время выполнения.

0 голосов
/ 23 марта 2012

Шаблон делегирования - хороший способ сделать это.

Вы можете проверить эти страницы:

http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18

http://en.wikipedia.org/wiki/Delegation_pattern#Objective-C_example

Какдругой подход, вы можете использовать целевой параметр в каждом вашем методе.И запланируйте обратные вызовы для этих целей, проверяя, отвечают ли они на ваши обратные вызовы, используя respondsToSelector

0 голосов
/ 23 марта 2012

Попробуйте выполнить вызовы функций с помощью Grand Central Dispatch. Это довольно просто и очень мощно. Вот пример того, как сделать асинхронный вызов с обратным вызовом:

http://pastebin.com/xDUKm6wh

Эта вставка жалуется на ошибки, но обратите внимание на шаблон. Это должно работать просто отлично.

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