Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios6 从plist读取对象,然后将对象保存到其他plist iOS_Ios6_Nsarray_Plist - Fatal编程技术网

Ios6 从plist读取对象,然后将对象保存到其他plist iOS

Ios6 从plist读取对象,然后将对象保存到其他plist iOS,ios6,nsarray,plist,Ios6,Nsarray,Plist,在四处搜索之后,我找到了大量关于我想做的事情的文章,但没有一篇是完全合用的 基本上我有一个静态plist文件。我不想改变它的内容。plist文件是从plist读取并存储在NSArray中的字典数组,数据显示在表中。这是完全工作和容易的部分 我现在想做的是,有一个plist,它将从静态plist数组读取的对象的用户收藏夹存储到一个nsmutablefavorites数组中。当用户选择收藏夹部分时,需要将此数组读入收藏夹表中 这个概念非常简单,用户将按下“添加到收藏夹按钮”,字典对象将添加到收藏夹数

在四处搜索之后,我找到了大量关于我想做的事情的文章,但没有一篇是完全合用的

基本上我有一个静态plist文件。我不想改变它的内容。plist文件是从plist读取并存储在NSArray中的字典数组,数据显示在表中。这是完全工作和容易的部分

我现在想做的是,有一个plist,它将从静态plist数组读取的对象的用户收藏夹存储到一个nsmutablefavorites数组中。当用户选择收藏夹部分时,需要将此数组读入收藏夹表中

这个概念非常简单,用户将按下“添加到收藏夹按钮”,字典对象将添加到收藏夹数组中,但我的问题是正确地检查收藏夹plist是否存在。如果有,则将该数据读入收藏夹数组。如果不存在,则创建空plist,该plist仍将读取到收藏夹数组中,但将为空


我不知道在这种特殊情况下从哪里开始,有什么想法吗?非常感谢

我第一次尝试做同样的事情时遇到了这个问题。主要的问题是,您不能向不存在的plist写入数据。因此,您需要在包中制作一个,并将其复制到您需要的位置,“如果它不存在”。这里有一个例子。这比“最低限度”要多一些,但我认为这可以解释问题。其结果是,通过将某些内容存储在“data.plist”中文档目录中的某个位置,从一次运行转移到另一次运行

ViewController.m
中(例如):

#导入“ViewController.h”
@界面视图控制器()
@结束
@实现视图控制器
////////////////////////////
//重要提示:
//为了使这些工作正常进行,您需要在项目的支持文件中创建data.plist,
//在编译和运行之前
//plist至少应该有一行,键为“key1”,值为“value1”
////////////////////////////
//返回plist文件所在的路径
//“内部”是指我们是想从一个烘焙到应用程序中(顺便说一句,它是只读的),还是从我们的文档中选择一个
-(NSString*)localPathForPlist:(NSString*)内部名称:(bool)内部
{
if(内部)返回[[NSBundle mainBundle]pathForResource:类型名称:@“plist”];
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString*documentsDirectory=[paths objectAtIndex:0];
返回[文档目录]
//这只是添加了name和“.plist”以使文件名类似于“data.plist”
stringByAppendingPathComponent:[NSString stringWithFormat:@“%@%@”,名称,@“.plist”]
];
}
//将值写入键,无论是否在内部plist中
-(void)writeToPlist:(NSString*)键集值:(NSString*)值内部:(bool)内部
{
NSString*path=[self localPathForPlist:@“data”internal:internal];
NSMutableDictionary*plistData=[[NSMutableDictionary alloc]initWithContentsOfFile:path];
[plistData setObject:value-forKey:key];
[plistData writeToFile:原子路径:是];
}
//从键读取值,无论是否在内部plist中
-(NSString*)readFromPlist:(NSString*)键内部:(bool)内部
{
NSString*path=[self localPathForPlist:@“data”internal:internal];
NSMutableDictionary*plistData=[[NSMutableDictionary alloc]initWithContentsOfFile:path];
返回(NSString*)[plistData valueForKey:key];
}
-(无效)viewDidLoad
{
[超级视图下载];
//在这里,我们浏览了所有不同的案例,试图在内部和外部编辑内容,
//将内部的复制到外部的位置,如果还没有的话,复制到最后
NSString*localPath=[self localPathForPlist:@“data”internal:FALSE];
NSString*internalPath=[self-localPathForPlist:@“数据”内部:TRUE];
NSLog(@“local path=%@”,localPath);
NSFileManager*fileManager=[NSFileManager defaultManager];
BOOL localPlistExists=[fileManager fileExistsAtPath:localPath];
//第一次运行此功能时,它将执行一次,然后执行其他所有运行的另一次:
如果(localPlistExists)NSLog(@“local plist exists”);
else NSLog(@“本地plist不存在”);
NSLog(@“key1的内部值=%@,[self-readFromPlist:@“key1”内部值:TRUE]);
NSLog(@“key1的外部值=%@,[self readFromPlist:@“key1”内部值:FALSE]);
NSLog(@“将内部键1设置为新值1”);
[自写密码:@“key1”设置值:@“new-value1”内部:TRUE];
NSLog(@“将外部键1设置为新值1”);
[自写应用程序:@“key1”设置值:@“new-value1”内部:FALSE];
NSLog(@“key1的内部值=%@,[self-readFromPlist:@“key1”内部值:TRUE]);
NSLog(@“key1的外部值=%@,[self readFromPlist:@“key1”内部值:FALSE]);
//第一次运行此功能时,它将执行一次,然后执行其他所有运行的另一次:
if(localPlistExists)NSLog(@“因为本地plist存在,不考虑”);
其他的
{
NSLog(@“由于本地plist不存在,从内部副本克隆”);
[fileManager copyItemAtPath:internalPath-toPath:localPath错误:nil];
}
NSLog(@“key1的内部值=%@,[self-readFromPlist:@“key1”内部值:TRUE]);
NSLog(@“key1的外部值=%@,[self readFromPlist:@“key1”内部值:FALSE]);
NSLog(@“将内部键1设置为新值1”);
[自写密码:@“key1”设置值:@“new-value1”内部:TRUE];
NSLog(@“将外部键1设置为新值1”);
[自写应用程序:@“key1”设置值:@“new-value1”内部:FALSE];
NSLog(@“key1的内部值=%@,[self-readFromPlist:@“key1”内部值:TRUE]);
NSLog(@“键1的外部值=%@