创建一个“调用”表:序列化块或NSOperation?

时间:2011-10-10 12:19:40

标签: objective-c ios serialization objective-c-blocks nsoperation

当我的应用离线时,我想将一些电话存储到服务器,以便稍后在应用重新上线时重播它们。

我想知道是否可以序列化块或NSOperations来保存它们(例如核心数据)?

实际上似乎并不简单:

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

这引发了一个无法识别的选择器:

-[__NSGlobalBlock__ encodeWithCoder:]: unrecognized selector

你知道如何实现这样一个“呼叫”表吗?

修改

我正在寻找的东西就像rails中的delayed_job,创建一个带有NSOperation的表,或者块,我可以在将来的某个时间执行。

1 个答案:

答案 0 :(得分:2)

NSOperation不符合NSCoding协议;所以我认为答案是“不”归档它的实例。我相信,块的答案也是一样的。

那就是说,你可以将实现这个策略所需的数据包装到一个继承自NSObject的类中,然后序列化吗?换句话说,不要尝试序列化代码;相反,序列化代码所需的数据。但是,如果不了解背景,很难知道这是否是一个可行的解决方案。