删除使用NSCoding存档的文件

时间:2014-01-09 14:32:10

标签: iphone objective-c

我正在尝试删除我的应用程序使用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的所有对象(可能,我应该将其设置为其他内容(即文档文件夹中的子文件夹...)如果是,我该怎么办呢。

1 个答案:

答案 0 :(得分:4)

NSCoding提供了一种将对象转换为NSData以便于归档的方法。您之后使用NSData个对象做的是您的责任。您可能会也可能不会将它们保存到单个文件中,但NSCoding不知道这一点。

您似乎已使用NSDataNSUserDefaults转储到[userDefaults setObject:data forKey:identifier]; 您需要删除执行identifier时使用的每个[userDefaults removeObjectForKey:identifier];的所有条目。 您无法自动确定这些条目是什么。

此外,您可能需要考虑不要占用NSUserDefaults并将其保存到单个文件中。 (查看[NSData writeToFile:])这将另外帮助您跟踪这些文件的内容(例如,您可以将它们放在同一个文件夹/子文件夹中)。