这是一个iOS 101问题,我觉得不知道答案是个屁股:-) 问题是 - 如何将iOS应用重置为首次安装时的状态? 该应用程序将内容存储在NSUserDefaults和plists中。如果要求用户删除并重新安装该应用程序似乎过分。
除了要求我的用户简单地重新安装应用程序之外,还有哪些可用的选项(这会让我看起来有点不创新:-))
这个特殊的应用程序使用NSUserDefaults和plists来存储数据。但是,当你想出你的创意解决方案时,我也会欣赏其他情况的任何线索(即核心数据和.plists中的数据)
此外,如果这是一个需要在应用程序代码中实现的功能,请欣赏有关优雅解决方案的建议。
谢谢!
答案 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文件,不要忘记重新初始化持久存储,托管对象上下文等......在此操作之后