Создайте таблицу вызовов: Сериализация блока или NSOperation? - PullRequest
1 голос
/ 10 октября 2011

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

Мне интересно, можно ли сериализовать блоки илиОперации по их сохранению (например, с основными данными)?

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

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

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

-[__NSGlobalBlock__ encodeWithCoder:]: unrecognized selector

У вас есть идеи, как я мог бы реализовать такую ​​таблицу "call"?

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

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

1 Ответ

2 голосов
/ 10 октября 2011

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

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

...