Создать таблицу «вызовов»: сериализовать блок или NSOperation?

#objective-c #ios #serialization #objective-c-blocks #nsoperation

#objective-c #iOS #сериализация #objective-c-блоки #nsoperation

Вопрос:

Когда мое приложение находится в автономном режиме, я хотел бы сохранить некоторые вызовы на сервер, чтобы воспроизвести их позже, когда приложение снова подключится к Сети.

Мне интересно, можно ли было бы сериализовать блоки или NSOperations для их сохранения (например, с core data)?

На самом деле кажется, что это не просто:

 id block = [^{
        int i =0;
    } copy];
NSData *myEncodedObjectToSave = [NSKeyedArchiver archivedDataWithRootObject:block];
  

Это вызывает нераспознанный селектор:

 -[__NSGlobalBlock__ encodeWithCoder:]: unrecognized selector
  

Есть ли у вас какие-либо идеи, как я мог бы реализовать такую таблицу «вызовов»?

Редактировать :

То, что я ищу, было бы чем-то вроде delayed_job в rails, создавая таблицу с NSOperation или блоками, которые я смогу выполнить когда-нибудь в будущем.

Ответ №1:

NSOperation не соответствует NSCoding протоколу; поэтому я думаю, что ответ «нет» на архивирование его экземпляров. Я полагаю, тот же ответ для блоков.

Тем не менее, не могли бы вы перенести данные, необходимые для реализации этой стратегии, в класс, который наследует от NSObject , а затем сериализует это? Другими словами, не пытайтесь сериализовать код; скорее сериализуйте данные, которые требуются коду. Однако трудно понять, является ли это жизнеспособным решением, не зная контекста.

Комментарии:

1. Спасибо за ваш ответ, сохранение данных для вызова сервера — это «резервное» решение (сохранение URL, параметров и т. Д.). То, что я искал, это сохранение всего контекста вызова, как я видел на другом языке, я обновлю свой ответ.