最近真机上的Plist 搞的我头大总是无法写入,这下终于行了_plist 真机读写失败_猿贷码的博客-程序员秘密

技术标签: path  library  iphone开发  

转载请注明本文章来自 x1135768777


其实写入不到真机里面主要是你写入时,当前那文件夹里你要写入的plist根本不存在

所以你怎么写都写不进去,所以你必须先创建你要写入的plist;

你用这样初始化程序就能自己创建:

 NSMutableArray *dictplist = [[NSMutableArray alloc] init];
                        [dictplist insertObject:markName atIndex:0];
                        
                        [dictplist writeToFile:plistPath atomically:YES];
直接下面这种是不行的

 NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
                        [array insertObject:markName atIndex:0];
                        
                        [array writeToFile:plistPath atomically:YES];

下面是具体的实现方法

一般plist 的写入位置在

写入文件的位置:(Library文件夹)

NSString *lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
                    NSString *libPath = [lib stringByAppendingString:@"/Caches"];
                    NSString* plistPath = [libPath stringByAppendingFormat:@"/bookmark.plist"];
                    
                    NSLog(@"%@",plistPath);
                    if(![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
                        NSMutableArray *dictplist = [[NSMutableArray alloc] init];
                        [dictplist insertObject:markName atIndex:0];
                        
                        [dictplist writeToFile:plistPath atomically:YES];
                        NSLog(@"------1-----%@",dictplist);
                    }
                    else
                    {
                        NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
                        [array insertObject:markName atIndex:0];
                        
                        [array writeToFile:plistPath atomically:YES];
                        NSLog(@"-------2----%@",array);
                    }


写入文件的位置:( Document 文件夹)

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                    
                    //获取完整路径
                    
                    NSString *documentsDirectory = [paths objectAtIndex:0];
                    
                    NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"test2.plist"];
            
                    NSLog(@"%@",plistPath);

                    if(![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
                        NSMutableArray *dictplist = [[NSMutableArray alloc] init];
                        [dictplist insertObject:markName atIndex:0];

                        [dictplist writeToFile:plistPath atomically:YES];
                        NSLog(@"------1-----%@",dictplist);
                    }
                    else
                    {
                        NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
                        [array insertObject:markName atIndex:0];

                        [array writeToFile:plistPath atomically:YES];
                        NSLog(@"-------2----%@",array);
                     }

下面的是参考 http://blog.csdn.net/smallsky_keke/article/details/7431277

这篇文章是自己通过实践获取,在网上查过很多资料,也走了不上的弯路,由于刚开始学子不久,只是把自己遇到的问题贡献给大家

一,创建文件   

    

    //获取路径对象

   NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

   //获取完整路径

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"test.plist"];

   NSMutableDictionary *dictplist = [[NSMutableDictionaryalloc ] init];

   //设置属性值

    [dictplist setObject:@"张三" forKey:@"name"];

    [dictplist setObject:@"李四"forKey:@"name1"];

    [dictplist setObject:@"王五"forKey:@"name2"];

   //写入文件

    [dictplist writeToFile:plistPath atomically:YES];

这个是创建了一个简单的plist文件,创建后的图1为:


下面是创建了一种多键值的plist文件,代码和图如下:

 

//获取路径对象

   NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  

   //获取完整路径

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"test.plist"];

   NSMutableDictionary *dictplist = [[NSMutableDictionaryalloc ] init];

   //定义第一个插件的属性

   NSMutableDictionary *plugin1 = [[NSMutableDictionaryalloc]init];

    [plugin1 setObject:@"张三"forKey:@"name1"];

    [plugin1 setObject:@"李四"forKey:@"name2"];

   //定义第二个插件的属性

   NSMutableDictionary *plugin2 = [[NSMutableDictionaryalloc]init];

    [plugin2 setObject:@"王五"forKey:@"name1"];

    [plugin2 setObject:@"赵斌"forKey:@"name2"];

   //设置属性值

    [dictplist setObject:plugin1 forKey:@"初一班"];

    [dictplist setObject:plugin2 forKey:@"初二班"];

   //写入文件

    [dictplist writeToFile:plistPath atomically:YES];

      

图2:

    

针对图1进行修改的程序,代码如下:

    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)       objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];    

   NSMutableDictionary *applist = [[[NSMutableDictionaryalloc]initWithContentsOfFile:path]mutableCopy];    

    NSString *name = [applist objectForKey:@"name"];    

    name = @"山山";   

    [applist setObject:name forKey:@"name"];

    [applist writeToFile:path atomically:YES];

执行后如下图:

    


针对图2进行修改的程序,代码如下:

   

   

      [dictplist writeToFile:plistPath atomically:YES];

   NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];

    

   //根据路径获取test.plist的全部内容

    NSMutableDictionary *infolist= [[[NSMutableDictionaryalloc]initWithContentsOfFile:path]mutableCopy];

    

    

    //获取初一班的信息

    NSMutableDictionary *info = [infolist objectForKey:@"初一班"];

    

    NSString *name1 = [info objectForKey:@"name1"];

    

    name1 = @"山山";

    

    [info setValue:name1 forKey:@"name1"];

    [infolist setValue:info forKey:@"初一班"];

    [infolist writeToFile:path atomically:YES];


图如下:

    

以上两个修改信息的地方,必须要加入红色标记的方法,才能在表里进行增改操作。

以上是个人的学习心得,请大家多多指教。

    

    




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/x1135768777/article/details/7626460

智能推荐

黑猴子的家:Redis 不小心执行flushall怎么办??_redis不小心执行了flushall_黑猴子的家的博客-程序员秘密

127.0.0.1:6379> shutdown nosave立即shutdown nosave服务器(这一条不会写入aof),因为当你flushall后,可能还要好几分钟rdb(数据还没存储),这时候aof可能还没有重写,你这时候shutdown nosave服务器,防止其他进程写数据,导致aof重写,只要aof没有重写,然后手工进aof文件修改flushall相关行,这样就不会导...

超越谷歌BERT!依图推出预训练语言理解模型ConvBERT_PaperWeekly的博客-程序员秘密

来源|机器之心在本文中,本土独角兽依图科技提出了一个小而美的方案——ConvBERT,通过全新的注意力模块,仅用 1/10 的训练时间和 1/6 的参数就获得了跟 BERT 模型一样的...

轻量级深度学习网络(五):详解轻量级网络Xception_xception提出背景_chenyuping666的博客-程序员秘密

 一、简介Xception并不是真正意义上的轻量化模型,只是其借鉴depth-wise convolution,而depth-wise convolution又是上述几个轻量化模型的关键点,所以在此一并介绍,其思想非常值得借鉴。Xception是Google提出的,arXiv 的V1 于2016年10月公开。论文标题:《Xception: Deep Learning with Depth...

linux 系统挂起_weixin_30451709的博客-程序员秘密

尽管内核代码的大部分 bug 以 oops 消息结束, 有时候它们可能完全挂起系统. 如果系 统挂起, 没有消息打印. 例如, 如果代码进入一个无限循环, 内核停止调度,[15]15并且系 统不会响应任何动作, 包括魔术 Ctrl-Alt-Del 组合键. 你有 2 个选择来处理系统挂起-- 或者事先阻止它们, 或者能够事后调试它们.你可阻止无限循环通过插入 schedule ...

Kafka和Pulsar的比较_pulsar和kafka对比_959y的博客-程序员秘密

文章目录1.架构1.1 Kafka1.2 Pulsar2.消息存储模型2.1 Kafka2.2 Pulsar3.消息消费模型3.1 Kafka3.2 Pulsar4. 多租户4.1 Pulsar4.2 Kafka5.运维5.1 集群部署5.2 扩容5.3 云原生支持5.4 替换broker1.架构1.1 Kafkabrocker和zk组成1.2 PulsarPulsar Broker会在本地缓存消息,并且支持TTL,Pulsar 通过分层架构, 将计算和存储分离, 存储采用BookKeepe

随便推点

长文总结半监督学习(Semi-Supervised Learning)_PaperWeekly的博客-程序员秘密

PaperWeekly 原创 ·作者|燕皖单位|渊亭科技研究方向|计算机视觉、CNN在现实生活中,无标签的数据易于获取,而有标签的数据收集起来通常很困难,标注也耗时和耗力。在这种情况...

必须懂的计算机网络知识—(TCP)_bueke的博客-程序员秘密

计算机网络在IT行业的重要性IT即互联网技术,从事的工作和网络有很大的关系,前端要负责和后台(服务器)进行交互,其必然得经过网络,所以懂点网络知识有很大的帮助。网络模型数据处理过程传输层协议的作用 提供了一种端到端(end to end)的连接,一般为前端和后台服务器的连接 由于网络层只管传递数据,并不关心成功与否,TCP协议在数据丢失、损坏的情况下保证数据的可靠性...

开源大开源大数据周刊-第61期_chipo1143的博客-程序员秘密

原文地址 EMR资讯: 在北京举行的Strata Data 会议上,EMR团队的木艮进行了《Hadoop遇到云上对象存储——实现原理、陷阱和性能优化》的主题分享 EMR + ECS D1机型的数据高可靠方案进行中,8月底将会正式提供服务。 EMR团队将会在Hadoop上进行...

ParsingError问题的解决_null-parsing error_clever101的博客-程序员秘密

             在VC编程遇到了一个奇怪的问题。我建了一个对话框工程,首先是用ClassWizard给对话框类添加了一些对应编辑框的CString变量,通过手动添加了另外一些变量,接着我准备利用ClassWizard添加一些消息函数,突然弹出一个警告对话框,如下图:    我很纳闷:我又没有编译运行,怎么会有警告框呢?既然警告框提示了我添加的变量,我以为是少了;之类的错误

win10下安装mysql5.7_win10安装mysql-5.7.15_全杰cc的博客-程序员秘密

下载安装1解压下载好的mysql-5713-winx64zip到你需要安转的目录egDmysql2配置解压目录下的my_defaultini中命名为myini3添加环境变量4初始化5启动mysql6进入msyql并设置密码连接到远程的mysql下载地址:http://dev.mysql.com/downloads/file/?id=463242安装1、解压下载好的mysql-5.7.

vue引入阿里彩色矢量图标_vue 引入阿里矢量图没眼色_chihaihai的博客-程序员秘密

1.将喜欢的图标添加到库中后加入项目,使用Symbol的方式下载到本地2.下载后将文件解压加入到你的项目中:3.在main文件中引入入iconfont.css和iconfont.js文件4.打开iconfont.css文件,将以下代码加进去[class^="el-icon-ch"],[class*=" el-icon-ch"]/*这里有空格,名字随意*/*{ font-fam...

推荐文章

热门文章

相关标签