标签:
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,然后
标签:
原文地址:http://www.cnblogs.com/mikado-Q/p/4340914.html