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

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

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

大概就是下面这种情况:

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

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

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

    通过代码就可以看出来 : 

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

  在文件夹中的显示位置:

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

1 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里面去

 1 - (void)createEditableCopyOfPlistIfNeeded{
 2     NSFileManager *fileManager = [NSFileManager defaultManager];
 3     NSString *filePatch = AdsPlistPath;
 4     BOOL Exists = [fileManager fileExistsAtPath:filePatch];
 5 //    //删除真机里面的数据
 6 //    BOOL success1 = [fileManager removeItemAtPath:filePatch error:nil];
 7 //    NSLog(@"%hhd",success1);
 8     if(!Exists){
 9 //        NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Ads" ofType:@"plist"];
10         NSString *plistPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"Ads.plist"];
11         NSError *error;
12         BOOL success = [fileManager copyItemAtPath:plistPath toPath:filePatch error:&error];
13         if(!success){
14             NSAssert1(0, @"错误写入文件:‘%@‘.", [error localizedDescription]);
15         }
16     }
17
18     NSMutableArray *data = [[NSMutableArray alloc] initWithContentsOfFile:filePatch];
19
20
21     if (data.count == 0){
22         NSLog(@"==plist没有数据");
23     }else{
24         self.adsArr = data;
25         NSLog(@"plist 的数据%@", data);//直接打印数据。
26         //        [data removeAllObjects];
27         //        [data writeToFile:filePatch atomically:YES];
28     }
29 }

然后再使用

1  NSString *filePatch = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"Ads.plist”];
这段代码获取document目录,接下来你就可以对它进行写入操作咯!
时间: 2024-10-17 01:36:53

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

iOS开发百度地图常见问题及解决办法

1.64bit模拟器不能正常工作 解决:请将Xcode5 的 Project -> Edit Active Target -> Build Settings -> Linking -> Other Linker Flags 中的"-ObjC"修改为"-all_load" 2.程序死在 _mapView = [[BMKMapView alloc] init]; 解决:很可能是由于没有在appDelegate里面初始化_mapManager 3.

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

在项目中有时候会遇到Library not found for -lPods(这里的IPods指的是你具体的第三方库)的问题 出现这个错误的原因是:xcode在编译的时候找不到这个库,从而导致项目无法编译! 这里给出几种解决办法: 第一种: a) Search from 'Library' from the Target Settings view and double-click to inspect the value of Library Search Paths b) There are

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

在项目中有时候会遇到Library not found for -lPods(这里的IPods指的是你具体的第三方库)的问题 出现这个错误的原因是:xcode在编译的时候找不到这个库,从而导致项目无法编译! 这里给出几种解决办法: 第一种: Search from 'Library' from the Target Settings view and double-click to inspect the value of Library Search Paths There are two v

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

前言: 前两篇博客遇到的问题是前几天在实验室开发的时候遇到的,花了两三天时间在上面,今天突然心血来潮,想把这些”坑”写下来,所以才有了这两篇写的很丑的博客随笔 今天在开发时又遇到一个问题,那就是标题所述: 用ASIHttprequest类做的网络请求  在模拟器和真机上都有请求,但是打包成IPA包放在真机上,ASI没有请求 状态栏菊花也没有 ,直接用xcode编译,也可以请求 编译archive正常通过后,发布到测试平台,手机进行安装后发现不能使用网络,不管是wifi还是流量,都不能进行正常的网

iOS开发--从TQRichTextViewDemo中学会分析工程

下载地址: http://code4app.com/ios/TQRichTextView/5244fe9c6803fa0862000000 1.首先找到AppDelegate类,无论一个工程有多么复杂,多么多的类,但入口只有一个就是AppDelegate类的didFinishLaunchingWithOptions方法.我们阅读别人源代码的时候可以从这里入手.在TQRichTextViewDemo工程中,这个方法中仅创建了一个TQViewController并设置为window的rootView

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

转自:https://www.cnblogs.com/LiuJL/p/7744473.html 1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页,这样字会非常小,所以苹果当初就把iPhone 4的960640分辨率,在网页里只显示了480320,这样devicePixelRatio=2.现在android比较乱,有1.5的,有2的也有3的.

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

一.开发中难免会遇到,系统返回的数据中字典套集合,集合里面又套一层字典,然后字典里面还有字典或者集合等等的复杂结构的数据...MJExtension轻松搞定这类问题 1.解决方法一: 例:百思项目中帖子数据有个模型,模型中还有一个最热评论的集合数据,集合数据要求是ChaosComment模型数据,然后ChaosComment模型中还有一个user字典(ChaosUser模型),如图: 解决方案:利用MJExtension,实现mj_objectClassInArray方法,告诉模型中的这个集合属

IOS开发笔记之十七——一个关于工程目录读写权限的问题

1.从互联网上或者其他途径拿过来的工程代码,往往会报下面的提示: (1)打开文件的时候出现窗口提示You don’t have permission to save the file “project.xcworkspace” in the folder “****.xcodeproj”. (2)进入Xcode时出现窗口提示Could not add write permission to the file because you do not own it. Try modifying the

iOS开发-CGAffineTransformMakeRotation改变了中心解决办法

坑爹的.  为了这个问题折腾了2个小时. 恼.. 今天在写一个时钟demo的时候, 时针的旋转用到了CGAffineTransformMakeRotation, 按理说. 图像的旋转是以图像本身的中心(center)为锚点的, 也就是在旋转过程中, 它的中心是固定的. 就和我们时针的效果一样. 比如我下面的时针, 分针, 秒针旋转的代码: NSDate *today = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalend