#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, параметров и т. Д.). То, что я искал, это сохранение всего контекста вызова, как я видел на другом языке, я обновлю свой ответ.