0

我在整个程序中调用函数 archiveQueue 来存储类型为 MYJSON 的对象,现在我想恢复我迄今为止存储在数组中的所有内容。

以下是我用来存储对象的函数:

- (void)archiveQueue:(MYJSON *)msg{

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:msg];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *file = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"myqueue.txt"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    [fileManager createFileAtPath:file contents:data attributes:nil];
    NSLog(@"ArchiveQueue: file = %@", file);

}

以下是我用来恢复对象的功能。

- (void)restoreQueue {


    NSLog(@"RestoreQueue: Restoring queue from Document Directory.");
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *file = [[paths objectAtIndex:0]  stringByAppendingPathComponent: @"myqueue.txt"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSData *data = [fileManager contentsAtPath:file];


        // How to unarchive that array of objects being stored. 

}

我想知道我应该如何解压缩存储为对象数组的所有内容?

4

1 回答 1

1

为了使用 NSKeyedArchiver 保存自定义类,该类需要实现NSCoding协议。即使您的类的实例作为成员包含在内,NSArray或者NSDictionary您需要让它们符合。

使用createFileAtPath:contents:attributes:将覆盖该文件的内容。

以下是一些选项:

每次归档一组对象。

get an array of all objects
add your new object
write that array to disk

将对象归档到目录中的唯一文件

documents/mySpecialObjects/A.myObject
documents/mySpecialObjects/B.myObject
documents/mySpecialObjects/C.myObject
...

create local NSMutableArray
enumerate all files inside of documents/mySpecialObjects
unarchive each file and add to your array
于 2014-05-07T23:43:28.447 回答