我知道这听起来像个奇怪的问题,但我需要将我的NSUserDefaults的副本保存到数据库中(我的目标是提供数据库备份/恢复功能,使用一个文件,数据库)。
所以我想我已经想出如何加载到文件中(尽管我没有在xcode中尝试过这个)。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults registerDefaults:[NSDictionary dictionaryWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"]]];
我已经用谷歌搜索了如何将NSUserDefaults保存到plist和一个字符串并返回,但是没有找到任何东西。
答案 0 :(得分:0)
您可以使用异步NSPropertyListSerialization API或NSDictionary上的同步便捷方法。
查看关于writeToFile:{method}的NSDictionary Apple Docs中的讨论,了解有关其工作原理的更多信息
此外,This article在cocoa中有一些关于序列化的好信息。
使用以下代码可以帮助您顺利上路。
//Get the user documents directory
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//Create a path to save the details
NSString *backedUpUserDefaultsPath = [documentsDirectory stringByAppendingPathComponent:@"NSUserDefaultsBackup.plist"];
//Get the standardUserDefaults as an NSDictionary
NSDictionary *userDefaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
//The easiest thing to do here is just write it to a file
[userDefaults writeToFile:backedUpUserDefaultsPath atomically:YES];
//Alternatively, you could use the Asynchronous version
NSData *userDefaultsAsData = [NSKeyedArchiver archivedDataWithRootObject:userDefaults];
//create a property list object
id propertyList = [NSPropertyListSerialization propertyListFromData:userDefaultsAsData
mutabilityOption:NSPropertyListImmutable
format:NULL
errorDescription:nil];
//Create and open a stream
NSOutputStream *outputStream = [[NSOutputStream alloc] initToFileAtPath:backedUpUserDefaultsPath append:NO];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
outputStream.delegate = self; //you'll want to close, and potentially dealloc your stream in the delegate callback
[outputStream open];
//write that to the stream!
[NSPropertyListSerialization writePropertyList:propertyList
toStream:outputStream
format:NSPropertyListImmutable
options:NSPropertyListImmutable
error:nil];
当你想要倒退时,你可以简单地做一些事情:
NSDictionary *dictionaryFromDisk = [NSDictionary dictionaryWithContentsOfFile:backedUpUserDefaultsPath];
或者您可以使用NSPropertyListSerialization中的stream / NSData方法,这与您保存它的方式类似。