我正在尝试删除我的应用程序使用NSCoding持久保存的所有文件。好像它应该是一件简单的事情,但是我找不到答案,虽然我在这里只显示一个类,我有几个,我想删除函数来保存所有类的所有实例我的应用程序已存档。我没有做任何与NSCoder不同的事情:
所以我的界面已定义
Details : NSObject <NSCoding>
我的实施有:
- (id)initWithCoder:(NSCoder *)decoder
{
NSLog(@"initWithCoder 'Details'");
if (self = [super init])
{
NSLog(@"Decoding 'Details'");
self.name = [decoder decodeObjectForKey:@"name"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
NSLog(@"Encoding 'Details'");
[encoder encodeObject:self.name forKey:@"name"];
}
当我写它时我正在使用:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object];
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:data forKey:identifier];
我确实开始试图查看文档目录,但我想我正在写这篇文章并且从我的研究中得知它将写入NSUserDefaults(这可能不是最好的事情)。因此,冒着提出两个问题的风险,如何删除使用NSCoder保存/存档到NSUserDefaults的所有对象(可能,我应该将其设置为其他内容(即文档文件夹中的子文件夹...)如果是,我该怎么办呢。
答案 0 :(得分:4)
NSCoding
提供了一种将对象转换为NSData
以便于归档的方法。您之后使用NSData
个对象做的是您的责任。您可能会也可能不会将它们保存到单个文件中,但NSCoding
不知道这一点。
您似乎已使用NSData
将NSUserDefaults
转储到[userDefaults setObject:data forKey:identifier];
您需要删除执行identifier
时使用的每个[userDefaults removeObjectForKey:identifier];
的所有条目。
您无法自动确定这些条目是什么。
此外,您可能需要考虑不要占用NSUserDefaults
并将其保存到单个文件中。 (查看[NSData writeToFile:]
)这将另外帮助您跟踪这些文件的内容(例如,您可以将它们放在同一个文件夹/子文件夹中)。