Iphone 持久化NSOperationQueue
有人知道如何在应用程序启动之间将NSOperationQueue持久化到磁盘吗?没有办法做到这一点。NSOperations是操作,是可运行代码的一部分,通常不可能持久保存到磁盘 但是,在应用程序中,您应该知道向队列中添加了哪些操作。要么使用子类,要么使用一些元数据。然后,您将以自定义方式存储元数据,即关于应该做什么的信息。应用程序启动后,现在可以从加载的元数据重新创建以前在队列中的操作Iphone 持久化NSOperationQueue,iphone,objective-c,Iphone,Objective C,有人知道如何在应用程序启动之间将NSOperationQueue持久化到磁盘吗?没有办法做到这一点。NSOperations是操作,是可运行代码的一部分,通常不可能持久保存到磁盘 但是,在应用程序中,您应该知道向队列中添加了哪些操作。要么使用子类,要么使用一些元数据。然后,您将以自定义方式存储元数据,即关于应该做什么的信息。应用程序启动后,现在可以从加载的元数据重新创建以前在队列中的操作 目前我几乎没有什么可以给你的,但我希望这已经有帮助了 我同意Max的观点-没有通用的方法可以做到这一点。通常
目前我几乎没有什么可以给你的,但我希望这已经有帮助了 我同意Max的观点-没有通用的方法可以做到这一点。通常,您希望使操作在概念上具有事务性,并与有限状态机中的状态相关联。在每个状态转换(即完成的操作)上保留当前状态和任何其他适当的数据,然后使用一段代码根据当前状态使用适当的操作填充NSOperationQueue。在重新启动应用程序时,从UI驱动的代码中调用相同的代码
与我一起工作的团队已经讨论了一段时间,讨论了一种尽可能多地实现这一点的通用方法(理想情况下是作为一个可重用的类或框架),但我们还没有走得很远。如果您有一个相对简单的队列,操作之间没有依赖关系,那么通过利用NSCoder,这应该是非常简单的 一般做法如下:
非常简单,首先确保您的所有NSO操作都采用NSCoding协议,并实施方法来确定要保存和恢复哪些字段: 肌肉手术
@interface MyOperation : NSOperation<NSCoding>
最后,可以随时序列化和反序列化队列。这将把它存储到手机的文档/数据文件中的存储器中,假设您的队列被称为操作
NSString * const dataPath = @"~/Documents/data";
// private
- (void) serializeQueue {
NSArray* storedOperations = [[self operations] operations];
[NSKeyedArchiver archiveRootObject:storedOperations toFile:[dataPath stringByExpandingTildeInPath]];
}
// private
- (void) deserializeQueue {
NSArray* storedOperations = [NSKeyedUnarchiver unarchiveObjectWithFile:[dataPath stringByExpandingTildeInPath]];
NSLog(@"count of opeations: %lu", (unsigned long) [storedOperations count]);
}
你能告诉我们你想要实现什么吗?也许有比持久化NSOperationQueue更好的方法来解决您的问题。
NSString * const dataPath = @"~/Documents/data";
// private
- (void) serializeQueue {
NSArray* storedOperations = [[self operations] operations];
[NSKeyedArchiver archiveRootObject:storedOperations toFile:[dataPath stringByExpandingTildeInPath]];
}
// private
- (void) deserializeQueue {
NSArray* storedOperations = [NSKeyedUnarchiver unarchiveObjectWithFile:[dataPath stringByExpandingTildeInPath]];
NSLog(@"count of opeations: %lu", (unsigned long) [storedOperations count]);
}