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

给这篇博客命名的时候,是不知道该怎么取名字的(语文不好),因为实在难以描述清楚,于是把它归为了 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. IT兄弟连 JavaWeb教程 AJAX定义以及解决的问题

    Ajax是"Asynchronous JavaScript And XML"的缩写(即:异步的JavaScript和XML),是一种实现无页面刷新获取服务器数据的混合技术,Ajax ...

  2. C-晾衣服

    链接:https://ac.nowcoder.com/acm/contest/892/C 题意: 鸡尾酒从杭州回来,囤积了许多衣服,洗好之后,他发现晾衣服是一件麻烦的事. 晾衣绳的长度只有L,而鸡尾酒 ...

  3. A-坐飞机

    链接:https://ac.nowcoder.com/acm/contest/892/A 题意: 鸡尾酒要去很多很多地方玩,于是他一次买了 n 张机票,初始鸡尾酒在第一个城市,对于任意的i(1≤i≤n ...

  4. MySQL数据库 (5)

    --视图,触发器,函数,存储过程,事务,索引

  5. Netty(5)@Sharable

    问题:我写了MyDecoder which extends ByteToMessageDecoder,单线程没问题,但是多线程时,报'the handler should be sharable'.查 ...

  6. 线程池(1)ThreadPoolExecutor梳理

    使用默认的 thread factory创建ThreadPoolExecutor实例 public ThreadPoolExecutor(int corePoolSize, int maximumPo ...

  7. JavaSE---基本网络支持

    1.Java为网络支持提供了java.net包,该包下的URL和URLConnection等类提供了 以编程方式访问WEB服务 的功能: 2.URLDecoder.URLEncoder提供了 普通字符 ...

  8. 在MasterPage中检验session是否存在~

    在母板頁中檢查user是否登入過,這樣就不用在每個頁中去作檢驗.在其Init事件中寫入如下代碼:     protected void ContentPlaceHolder1_Init(object  ...

  9. HDU 3530Subsequence(单调队列)

    题意 题目链接 给出$n$个数,找出最长的区间,使得区间中最大数$-$最小数 $>= m$ 且$<= k$ Sol 考虑维护两个单调队列. 一个维护$1 - i$的最大值,一个维护$1 - ...

  10. Kendo UI 单页面应用(二) Router 类

    Kendo UI 单页面应用(二) Router 类 Route 类负责跟踪应用的当前状态和支持在应用的不同状态之间切换.Route 通过 Url 的片段功能(#url)和流量器的浏览历史功能融合在一 ...