首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >持久化NSOperationQueue

持久化NSOperationQueue
EN

Stack Overflow用户
提问于 2010-09-05 05:02:03
回答 4查看 3.1K关注 0票数 13

有人知道如何在应用程序启动之间将NSOperationQueue持久化到磁盘吗?

EN

回答 4

Stack Overflow用户

发布于 2010-09-05 18:40:21

没有办法做到这一点。NSOperations是动作,是可运行代码的一部分,一般不可能持久化到磁盘。

但是,在您的应用程序中,您应该知道向队列添加了哪些操作。可以使用子类,也可以使用一些元数据。然后以一种自定义的方式存储元数据,即关于应该做什么的信息。在应用程序启动时,以前在队列中的操作现在可以从加载的元数据中重新创建。

目前我几乎没有什么可以给你的了,但我希望这已经是有帮助的了!

票数 10
EN

Stack Overflow用户

发布于 2013-08-17 10:01:36

非常简单,首先确保您的所有NSOperations都采用NSCoding协议,并实现方法来告诉他们想要保存和重新获得哪些字段:

MyOperation.h

代码语言:javascript
复制
@interface MyOperation : NSOperation<NSCoding>

MyOperation.m

代码语言:javascript
复制
#pragma mark NSCoding

#define kSomeKey       @"someKey"

- (void) encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:[self someKey] forKey:kSomeKey];
}

- (id)initWithCoder:(NSCoder *)decoder {

    if (self = [super init]) {
        NSString *someKey = [decoder decodeObjectForKey:kSomeKey];
        [self setSomeKey:someKey];
    }

    return self;
}

最后,随时序列化和反序列化您的队列。假设您的队列名为operations,这会将其存储到电话上的Documents/data文件中。

代码语言:javascript
复制
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]);
}
票数 7
EN

Stack Overflow用户

发布于 2012-05-18 20:56:12

我同意Max的观点--没有一种通用的方法可以做到这一点。通常,您希望使操作在概念上是事务性的,并与有限状态机中的状态相关联。将当前状态和每个状态转换(即已完成的操作)上的任何其他适当数据持久化,然后有一段代码,该代码根据当前状态用适当的操作填充NSOperationQueue。从UI驱动的代码中调用相同的代码,并在重启应用程序时调用。

与我一起工作的团队已经讨论了一段时间,以尽可能多地完成这项工作(理想情况下,作为可重用的类或框架),但我们还没有取得很大进展。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3643995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档