plist

 

plist实际是xml文件, plist的根节点只能是字典或者数组,在plist中数组或者字典的内容只能是 BOOL, NSString  NSNumber, NSDate, NSData, NSArray, NSDictionary. 不能是用户自己创建的类的对象。

 1 -(void)saveplist{
 2     NSMutableArray *array1 = [[NSMutableArray alloc] init];
 3     NSMutableArray *array2 = [[NSMutableArray alloc] init];
 4     NSMutableArray *array = [[NSMutableArray alloc] init];
 5     for (int i = 68; i < 80; i++) {
 6         [array1 addObject:[NSString stringWithFormat:@"3272%d.jpg",i]];
 7     }
 8     for (int i = 1; i < 16; i++) {
 9         [array2 addObject:[NSString stringWithFormat:@"17_%d.jpg",i]];
10     }
11    
12       NSString *plistpath = [[NSBundle mainBundle] pathForResource:@"mysourceimages" ofType:@"plist"];
13     [array addObject:array1];
14     [array addObject:array2];
15     [array writeToFile:plistpath atomically:YES];
16     NSLog(@"the path:%@",plistpath);
17 }

 

今天学习并尝试了用代码写数据到一个mysourceimages.plist文件中,但是出现一个想不通的问题,代码应该没有问题,但是代码左侧的对应的mysourceimages.plist文件并没有更新数据。后来找到模拟器上资源路径下的mysourceimages.plist,点开查看,数据已经写入进去了。仔细思考了下,其实这应该是我自己有些地方没理解过来,记录一下:

1.每在Xcode上点执行一次,模拟器上的程序相当于卸载再重新安装一次,所以当我打开模拟器上应用的mysourceimages.plist所在的路径时,点,文件路径会退出来(因为卸载了程序的话,这个路径不存在了,路径不存在,文件路径就回往上层路径回退)。我工程上新建的mysourceimages.plist并未添加数据,如果我把上面代码全部注释,再去模拟器上应用的mysourceimages.plist所在的路径查看mysourceimages.plist,也是没有任何数据的,说明上一次有写入数据的那个已经卸载了,这个是全新的。

2.我打开的mysourceimages.plist所在的路径是模拟器上安装的那个程序的资源文件mysourceimages.plist,并不是我们代码工程的路径下的mysourceimages.plist,本来就是两个不同的文件,我写入的是应用的资源路径下的mysourceimages.plist,所以工程左侧的mysourceimages.plist数据当然不会改变。如果要改变代码工程里面的mysourceimages.plist,只能打开文件一个个的手动添加数据(好麻烦)。点执行的时候,会根据工程生成一个mysourceimages.plist保存在模拟器上应用资源路径下(就是上面那个好长的路径)。

3.应用执行过程读取mysourceimages.plist时,路径一定要选择模拟器上应用程序对应的资源路径,如果给的是工程的文件路径的话,将读取不到mysourceimages.plist。所以代码中读取mysourceimages.plist应该读取这个路径:

 NSString *plistpath = [[NSBundle mainBundle] pathForResource:@"mysourceimages" ofType:@"plist"];




关于沙盒

sandbox  沙盒,在IOS应用程序中,每个应用都有一个沙盒,应用程序所有的资源都放在沙盒目录下,当前应用程序不能访问除自己沙盒目录外的内容。

 

//取当前应用程序的home目录

    NSString *homePath = NSHomeDirectory();

 

//沙盒目录下的Documents目录

    NSString *docuPath = [homePath stringByAppendingString:@"/Documents"];

 

//沙盒目录下的tmp目录

    NSString *temPath = NSTemporaryDirectory();

 

//沙盒目录下的应用程序目录

    //NSBundle 是应用程序资源的定位类,mainBundle 表示了应用程序的主资源, bundlePath 方法能取到主资源的路径

    NSString *appPath = [[NSBundle mainBundle] bundlePath];

 

 

http://blog.csdn.net/huifeidexin_1/article/details/7487868 中关于plist文件读取和写入等写的很详细,码一下。看到那篇博客里面这段“别傻傻的认为自己建立一个plist,然后

运行程序的时候他会在你建的那plist里面多出几行数据,因为你修改的是应用中的
plist而非你本地的那个plist。”感觉膝盖中了一箭。
posted @ 2015-03-16 01:28  mikado_Q  阅读(299)  评论(0编辑  收藏  举报