我正在调用函数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.
}
我想知道如何将我存储的所有内容归档为对象数组?
答案 0 :(得分: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