陈斌彬的技术博客

Stay foolish,stay hungry

Objective-c NSUserDefaults 删除整个 Plist 文件

我们知道 NSUserDefaults 可以保存某些信息在本地,例如登录的账号,密码等等,当我们使用NSUserDefaults 时,它是将信息写入到本地的一个 plist 文件里,我们都知道删除 plist 里的某一项内容直接用 [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];这样就可以直接删除 plist 中的某一个特定的项的内容了,

但是,如果要把整个 plist 文件删除,那应该怎么样呢?

其实也不难,我们要知道删除整个 plist 文件实际上就是把 plist 文件中的所有 item 删除就行了,也就是说,如果 plist 文件里只有一项内容,

NSUserDefaults *userDefatluts = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:"张三" forKey:@"name"];
[userDefaults synchronize];   //这行代码一定要加,虽然有时候不加这一行代码也能保存成功,但是如果程序运行占用比较大的内存的时候不加这行代码,可能会造成无法写入plist文件中,我试验过,真的是这样的

这样,我们就往 plist 文件中写入了一个 name的 item。

接下来,我们这么写:

NSUserDefaults *userDefatluts = [NSUserDefaults standardUserDefaults];
[userDefaults removeObjectForKey:@"name"];
[userDefaults synchronize];

这样你会发现,plist 文件消失了,但是如果我们写入的内容不仅仅是一项那要怎么删除所有的呢? 其实原理和只有一个 item 时候是一样的,我们删掉 plist 文件也就是相当于把 plist 文件里的所有 item 依次删除,对,就这么简单。

下面看一下代码:

我们先要取到 plist 文件里的所有的 Key 否则是不能用 removeObjectForKey:key 这个方法来删除的,那么怎样获得 plist 文件中素有 item 的 key 呢,dictionary 有一个方法 [dictionary allKeys];返回值是一个数组,这样我们能拿到 dictionary 中所有的 key, 我们知道我们写入的 plist 文件中的项目是以一个字典的形式保存的,所以, 代码如下:

NSUserDefaults *userDefatluts = [NSUserDefaults standardUserDefaults];
NSDictionary *dictionary = [userDefaults dictionaryRepresentation];
for(NSString* key in [dictionary allKeys]){
    [userDefaults removeObjectForKey:key];
    [userDefaults synchronize];
}

这样自己通过 NSUserDefaults 写入到本地的 plist 文件就能把整个文件删除了。