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