[英]writing NSArray back to plist
我有一个以下格式的plist:
以下是我的阅读方式:
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSString *path = [[NSBundle mainBundle] pathForResource:@"States" ofType:@"plist"];
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:path];
NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization
propertyListFromData:plistXML
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&errorDesc];
self.statesData = [temp objectForKey:@"Root"];
问题是,如果我想将这个名为self.statesData的NSMutableArray写回plist,我该怎么做? 我猜这样的事情不行......
NSString *path = [[NSBundle mainBundle] pathForResource:@"States" ofType:@"plist"];
[self.main.statesData writeToFile:path atomically: YES];
您无法编写应用程序包,您需要写入应用程序的文档目录。
示例代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
BOOL status = [array writeToFile:filePath atomically:YES];
如果您在第一次运行时在应用程序包中有初始爸爸,请将其复制到Documents目录,并进一步访问Documents目录。
在iOS上,您无法写入应用包装器中的文件(在MacOS X上,您真的不应该)。 您需要做的是首先从应用程序包装器复制到Documents文件夹,然后加载并保存到该版本。
获取文档文件夹:
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
;
filePath = [filePath stringByAppendingPathComponent:@"States.plist"];
[self.statesData writeToFile:path atomically:YES];
从你正在做的app包装器加载文件; 使用NSFileManager
可以轻松完成复制。 在保存之前,您可以重新构建临时数组并从statesData中替换该键。 备用读取命令可能是:
self.statesData = [NSArray arrayWithContentsOfFile:filePath];
以上@ zaph代码的SWIFT版本:
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsDirectory = paths[0]
let filePath = NSURL(fileURLWithPath: documentsDirectory, isDirectory: true).URLByAppendingPathComponent(fileName)
let status = items.writeToFile(filePath.absoluteString, atomically: true)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.