iOS:重置iOS应用数据有哪些可能的选项而无需重新安装?

时间:2013-05-21 16:53:44

标签: ios core-data plist nsuserdefaults reset

这是一个iOS 101问题,我觉得不知道答案是个屁股:-) 问题是 - 如何将iOS应用重置为首次安装时的状态? 该应用程序将内容存储在NSUserDefaults和plists中。如果要求用户删除并重新安装该应用程序似乎过分。

除了要求我的用户简单地重新安装应用程序之外,还有哪些可用的选项(这会让我看起来有点不创新:-))

这个特殊的应用程序使用NSUserDefaults和plists来存储数据。但是,当你想出你的创意解决方案时,我也会欣赏其他情况的任何线索(即核心数据和.plists中的数据)

此外,如果这是一个需要在应用程序代码中实现的功能,请欣赏有关优雅解决方案的建议。

谢谢!

2 个答案:

答案 0 :(得分:5)

从沙箱中删除所有文件:

NSString *p = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
for (NSString *fname in @[ @"tmp", @"Library", @"Documents", @"Caches", @"Preferences" ]) {
    NSString *path = [p stringByAppendingPathComponent:fname];
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL];
}

仅重置用户默认值的替代方法:

NSDictionary *dRepr = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in dRepr) {
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}

[[NSUserDefaults standardUserDefaults] synchronize];
[NSUserDefaults resetStandardUserDefaults];

答案 1 :(得分:1)

NSUserDefaults是一个keyValue集合,因此对于您在整个应用中使用的所有键,您可以调用此方法:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"yourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

关于plist我想你是在谈论在磁盘设备上编写NSArrays和NSDictionaries,或者在你的对象子类中实现NSCoding委托并归档它们......在这种情况下只需使用文件管理器删除文件

NSError *error;
[[NSFileManager defaultManager] removeItemAtPath:@"filePath" error:&error];

对于核心数据来说很简单,你可以像删除plist一样删除sqlite文件,不要忘记重新初始化持久存储,托管对象上下文等......在此操作之后