繁体   English   中英

把NSArray写回plist

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM