想写这篇博客其实在一两个月前开发遇见的时候就想把这个问题写成博客的,奈何自己一直懒外加一直没有时间,就把这个事情给耽搁了,好在当时知道下自己一定要把这个问题给描述出来,免得以后其他人遇到这个问题会纠结很久(其实就是我啦,基础知识不过关),所以当时就把这个过程给记录下来了

给这篇博客命名的时候,是不知道该怎么取名字的(语文不好),因为实在难以描述清楚,于是把它归为了 iOS开发遇到的坑系列文章(如果各位看官认为这确实是我基础的问题,请告诉欧文,我会修改过来的,顺便也学习学习)

大概就是下面这种情况:

  你想要给你的app内置一个plist表,以便app初始化数据的时候直接从里面读取出来进行加载,常见的就是美团客户端上面有一张全国各地的地区plist,因为这个如果每次都从服务器获取的话,因为它比较大,所以下载的时间就比较长,给用户的体验十分不好,所以干脆内置!

  但是问题来了,如果你想给这一张plist表写进数据,恩,那就恭喜入坑,因为你是无论如何写不进去的!(工程里只可读取,不可以写入)

  下面解释一下原因:你在工程目录下直接添加的plist 表和我们通常所说的document目录下的位置是不一样的

    通过代码就可以看出来 : 

  NSString *filePatch = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:]stringByAppendingPathComponent:@"Ads.plist”];

  在文件夹中的显示位置:

 /Users/WayneLiu_Mac/Library/Developer/CoreSimulator/Devices/E6C97A37-A9C1-4F4A-A3EA-EFBB75C1BB43/data/Containers/Data/Application/5E03DC76--4E24-BDBE-F9D5D3072899/Documents/Ads.plist

 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Ads" ofType:@"plist”]

  在文件夹中的显示位置:

/Users/WayneLiu_Mac/Library/Developer/CoreSimulator/Devices/E6C97A37-A9C1-4F4A-A3EA-EFBB75C1BB43/data/Containers/Bundle/Application/7029EF69-D4A9-45D6-90A7-15794D256688/MZTong.app/Ads.plist,path 

他们在这里已经分路啦!

存数据只能是document那三个文件夹
必须写到上面的哪个document里面去 要是直接bundle是没有权限的 ,iTunes是可以看到的
 
 
好的,下面说说解决办法吧:
     要想存数据到里面去,你只能在沙盒下的document里进行操作,所以你必须先把你的工程下已经存在的plist表先copy到document里面去
 - (void)createEditableCopyOfPlistIfNeeded{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *filePatch = AdsPlistPath;
BOOL Exists = [fileManager fileExistsAtPath:filePatch];
// //删除真机里面的数据
// BOOL success1 = [fileManager removeItemAtPath:filePatch error:nil];
// NSLog(@"%hhd",success1);
if(!Exists){
// NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Ads" ofType:@"plist"];
NSString *plistPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"Ads.plist"];
NSError *error;
BOOL success = [fileManager copyItemAtPath:plistPath toPath:filePatch error:&error];
if(!success){
NSAssert1(, @"错误写入文件:'%@'.", [error localizedDescription]);
}
} NSMutableArray *data = [[NSMutableArray alloc] initWithContentsOfFile:filePatch]; if (data.count == ){
NSLog(@"==plist没有数据");
}else{
self.adsArr = data;
NSLog(@"plist 的数据%@", data);//直接打印数据。
// [data removeAllObjects];
// [data writeToFile:filePatch atomically:YES];
}
}
 
然后再使用
  NSString *filePatch = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:]stringByAppendingPathComponent:@"Ads.plist”];
这段代码获取document目录,接下来你就可以对它进行写入操作咯!

iOS开发遇到的坑之五--解决工程已存在plist表,数据却不能存入的问题的更多相关文章

  1. iOS开发遇见的坑之二:工程文件中插件和自身工程命名冲突

    在升级cocoapod后,我重新管理了一下工程,其实也就是把各个类分类进行管理 类似于这样 然后编译就发现不能运行 1.其中一个错误是工程文件缺失,根据提示添加进来进行 2.有一个是pch的相对路径变 ...

  2. iOS开发中 workspace 与 static lib 工程的联合使用

    在iOS开发中,其实workspace的使用没有完全发挥出来,最近做了一些研究,也想把之前写过的代码整理下,因为iOS里面的布局方式,交互方式也就那么几种.所以,整理好了之后,更能快捷开发,而且能够形 ...

  3. iOS开发遇到的坑之六--使用cocopods管理第三方库时,编译出现Library not found for -lPods问题的解决办法

    在项目中有时候会遇到Library not found for -lPods(这里的IPods指的是你具体的第三方库)的问题 出现这个错误的原因是:xcode在编译的时候找不到这个库,从而导致项目无法 ...

  4. iOS开发的那些坑

    最近重新拿起了iOS的开发,使用OC和Swift混编,碰到了一些比较棘手的问题,在这里记录下来,方便自己以后或他人不再入坑.这篇文章的内容包含: UITableViewCell的真实结构在iOS的环境 ...

  5. iOS开发遇到的坑之三--使用asi框架在xcode下正常运行,但是打包时却不能进行网络访问

    前言: 前两篇博客遇到的问题是前几天在实验室开发的时候遇到的,花了两三天时间在上面,今天突然心血来潮,想把这些”坑”写下来,所以才有了这两篇写的很丑的博客随笔 今天在开发时又遇到一个问题,那就是标题所 ...

  6. [转载]常见的移动端H5页面开发遇到的坑和解决办法

    转过来,平时看看.虽然还有很多问题至今无解.比如:华为麒麟950的P8和meta打开我们的应用首页经常偶发白屏.!! 1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是 ...

  7. 常见的移动端H5页面开发遇到的坑和解决办法

    转过来,平时看看.虽然还有很多问题至今无解.比如:华为麒麟950的P8和meta打开我们的应用首页经常偶发白屏.!! 1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是 ...

  8. iOS开发遇到的坑之四--图片命名不规范

    最近上手并主导一个小项目的研发,在开发地图模块的时候,UI切图给我们使用,他给的图片命名是1.1.1.png 1.1.2.png 1.1.3.png 我也没有多看,就直接打包发给小组成员叫他添加到Im ...

  9. iOS开发小技巧--利用MJExtension解决数据结构复杂的模型转换

    一.开发中难免会遇到,系统返回的数据中字典套集合,集合里面又套一层字典,然后字典里面还有字典或者集合等等的复杂结构的数据...MJExtension轻松搞定这类问题 1.解决方法一: 例:百思项目中帖 ...

随机推荐

  1. mySQL多表查询与事务

    一.范式 1. 什么是范式 1.1 什么是范式 范式:设置一个科学的.规范的数据库,需要满足的一些规则 1.2 有哪些范式 共有:6大范式 第1范式:1NF 满足最基本的要求 第2范式:2NF 在1N ...

  2. 【实验吧】该题不简单——writeup

    题目地址:http://ctf5.shiyanbar.com/crack/3/ 一定要注意读题: 要求找出用户名为hello的注册码,这八成就是 要写注册机啊! ——————————————————— ...

  3. Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

    前言 在分布式架构中,所谓的断路器模式是指当某个服务发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,这样就不会使得线程因调用故障服务被长时间占用不释放,避免故障的继续蔓延.Spring ...

  4. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  5. Jmeter (二十六)逻辑控制器 之 Module Controller and Include Controller

    Module Controller ---模块控制器 测试计划设置“独立运行没每个线程组” 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disa ...

  6. Table 自定义设置边框线

    table上添加:border-collapse: collapse;//设置表格边框分开显示就可以设置tr td的边框线

  7. 4.高级数据过滤 ---SQL

    一.AND操作符 要通过不止一个列进行过滤,可以使用A ND操作符给WHERE子句附加条件. SELECT prod_id, prod_price, prod_name FROM Products ; ...

  8. 蓝桥校内选拔赛B题(不一定正确)

    由于没报名,只能靠别人发的截图来做了 我的思路:全排列,判断加号位置,判断/位置,看是否存在这个相等的 时间复杂度较高,在10e8左右 代码: #include<cstdio> #incl ...

  9. mysql ibd 文件过大问题

    公司的数据库挂了查了下 ,每个表都有自己独立的表空间,有一张表的ibd 文件有好几G了.然后想要释放它. 解决方案: 第一种,删除表,然后重新建.drop table 操作自动回收表空间 第二种,al ...

  10. nodejs 实践:express 最佳实践(三) express 解析

    nodejs 实践:express 最佳实践(三) express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固, ...