将 NSArray 写入 plist 文件

Posted

技术标签:

【中文标题】将 NSArray 写入 plist 文件【英文标题】:Write NSArray to plist file 【发布时间】:2015-12-16 00:22:26 【问题描述】:

我有一个获取 plist 文件数据的代码和一个将数据写入 plist 文件的代码。现在的事情是,它将读取的数据添加到一个数组中(参见图片)。 我想要它在不同的数组中(见绿色图像)

这是我的代码:

- (void)WriteData 
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"MuziekList.plist"];

if ([fileManager fileExistsAtPath:path] == NO) 
    NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"MuziekList" ofType:@"plist"];
    [fileManager copyItemAtPath:resourcePath toPath:path error:&error];

//_______________________________________________________________________________________________________________
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

//load from savedStock example int value
NSArray *NummerTexts;
NummerTexts = [savedStock objectForKey:@"Nummers"];
NSString *NummerTextsR = [[NummerTexts valueForKey:@"description"] componentsJoinedByString:@" - "];

NSArray *ArtiestTexts;
ArtiestTexts = [savedStock objectForKey:@"Artiesten"];
NSString *ArtiestTextsR = [[ArtiestTexts valueForKey:@"description"] componentsJoinedByString:@" - "];
//_______________________________________________________________________________________________________________

NSUserDefaults *CurrentVideoNummerResult = [NSUserDefaults standardUserDefaults];
NSString *CurrentVideoNummer = [CurrentVideoNummerResult stringForKey:@"CurrentVideoNummer"];

NSUserDefaults *CurrentVideoArtiestResult = [NSUserDefaults standardUserDefaults];
NSString *CurrentVideoArtiest = [CurrentVideoArtiestResult stringForKey:@"CurrentVideoArtiest"];

/*
NSUserDefaults *CurrentVideoIDResult = [NSUserDefaults standardUserDefaults];
NSString *CurrentVideoID = [CurrentVideoIDResult stringForKey:@"CurrentVideoID"];
*/

NSMutableDictionary *plist = [[NSDictionary dictionaryWithContentsOfFile:path] mutableCopy];
NSMutableArray *newArray = [[NSMutableArray alloc] init];
NSMutableArray *newArray2 = [[NSMutableArray alloc] init];

newArray = [NSMutableArray arrayWithObjects:CurrentVideoNummer, NummerTextsR, nil];
[plist setObject:newArray forKey:@"Nummers"];


newArray2 = [NSMutableArray arrayWithObjects:CurrentVideoArtiest, ArtiestTextsR, nil];
[plist setObject:newArray2 forKey:@"Artiesten"];

[plist writeToFile:path atomically:YES];

点击图片链接

https://www.dropbox.com/sh/wrk8h8cnwye8myx/AADl4omkGdl3S4ESXv6NbymVa?dl=0

【问题讨论】:

这真的很难理解 - 你能试着在这里用纯文本说明你试图通过读取和写入数组来完成什么吗? 【参考方案1】:

您的问题和问题令人困惑。也许这会有所帮助:

您的代码读取当前数组 (NummerTexts),将该数组展平为单个字符串 (NummerTextsR),获取第二个字符串 (CurrentVideoNummer),然后构建一个双元素数组 (newArray) .

你的问题似乎是为什么你会得到一个二元素数组...?

如果您不想展平原始数组,请不要这样做,只需制作它的可变副本,例如:

NSMutableArray *existingTexts = [[NummerTexts valueForKey:@"description"] mutableCopy];

添加你的新元素:

[existingTexts addObject:currentVideoNummer];

然后像以前一样写回去。

HTH

顺便说一句,不要以大写字母开头局部变量名,这违反了约定,这就是为什么你的问题中突出显示的语法都是错误的。

【讨论】:

所以我尝试了它,这几乎是我想要的,但它现在看起来像这样:dropbox.com/s/3a3pxbof9irqkjf/NOT%20YET.png?dl=0 我需要这个:dropbox.com/s/avdt33umncb6a7c/5%20%28GREEN%29.png?dl=0 但是已经感谢您的帮助。也许你可以帮助我 从您的图像而不是向数组中添加元素,您创建了一个包含两个元素的新数组,一个是现有数组,另一个是元素。你需要仔细阅读你的代码并弄清楚你是如何犯这个错误的。您还可以在调试器中单步执行并观察变量如何变化以帮助您弄清楚。

以上是关于将 NSArray 写入 plist 文件的主要内容,如果未能解决你的问题,请参考以下文章

读取和存储多个 NSArray

将 NSDictionary 写入我的应用程序包中的 plist

NSArray文件读写

iOS plist文件操作

iOS plist文件操作

来自 plist 文件的 NSArray 或 NSDictionary