3

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

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

这个特殊的应用程序使用 NSUserDefaults 和 plists 来存储数据。但是,当您提出创造性的解决方案时,我也会感谢其他情况的任何线索(即数据在核心数据和 .plist 中的位置)

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

谢谢!

4

2 回答 2

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];
于 2013-05-21T17:02:09.910 回答
1

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

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

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

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

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

于 2013-05-21T17:11:26.127 回答