簡體   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