归档多个对象并将它们取消归档为目标C中的对象数组

时间:2014-05-07 22:27:26

标签: objective-c nskeyedarchiver nskeyedunarchiver

我正在调用函数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. 

}

我想知道如何将我存储的所有内容归档为对象数组?

1 个答案:

答案 0 :(得分:1)

为了使用NSKeyedArchiver保存自定义类,该类需要实现NSCoding协议。即使您的班级的实例被包含为NSArrayNSDictionary的成员,您也需要让它们符合。

使用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