2.软文推荐
3.软文推荐
ios微信文件储存在哪一。使用属性列表保存对象:在cocoa中,有一类对象称为属性列表,通常称为plist。这些列表包含一组cocoa知道如何操作的对象。具体来说,cocoa知道如何苹果微信下载...1、使用属性列表保存对象:在Cocoa中,与一类名为属性列表的对象,常简称为plist。
这些列表包含Cocoa知道如何操作的一组对象。
具体来讲,Cocoa知道如何将它们保存到文件中并进行加载。
属性列表类包括:NSArray,NSDictionary,NSString和NSData,以及它们的变体(Mutable)NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];NSArray*array=[NSArrayarrayWithObjects:@First,@second,@third,@fourth,@fifth,nil];[arraywriteToFile:@array.plistatomically:YES];2、编码对象遗憾的是,无法总是将对象信息表示为属性列表类。
如果能将所有对象都表示为数组字典,我们就没有必要使用自己的类了。
所幸,Cocoa具备一种机制来将对象自身转化为某种格式并保存到磁盘中。
对象可以将它们的实例变量和其它数据编码为数据块,然后保存到磁盘中。
遗憾将这些数据块读到内存中,并且还能基于保存的数据创建新对象。
这个过程称为编码和解码,或称为序列化和反序列化。
通过NSCoding协议,可以使用自己的对象实现相同功能,实现它的两个方法:-(void)encodeWithCoder:(NSCoder*)aCoder;-(id)initWithCoder:(NSCoder*)aDecoder;NSCoder是一个抽象类,定义一些有用的方法来在对象与NSData之间来回转换。
完全不需要创建新NSCoder,因为它事件上并无多大作用。
但是我们实际上要使用NSCoder的一些具体子类来编码和解码对象。
我们将使用其中两个子类NSKeyedArchiver和NSKeyedUnArchiver.下面是一个例子:头文件类BookObj.h的源码:////BookObj.h//#importCocoa/Cocoa.h@interfaceBookObj:NSObjectNSCoding{NSString*bookName;NSString*author;}@property(copy)NSString*bookName;@property(copy)NSString*author;-(id)initWithName:(NSString*)nameauthor:(NSString*)au;实现类BookObj.m的源码:////BookObj.m//#importBookObj.h@implementationBookObj@synthesizebookName;@synthesizeauthor;-(id)initWithName:(NSString*)nameauthor:(NSString*)au{if(self=[superinit]){self.bookName=name;self.author=au;}returnself;}-(void)encodeWithCoder:(NSCoder*)aCoder{[aCoderencodeObject:self.bookNameforKey:@bookName];[aCoderencodeObject:self.authorforKey:@author];}-(id)initWithCoder:(NSCoder*)aDecoder{if(self=[superinit]){self.bookName=[aDecoderdecodeObjectForKey:@bookName];self.author=[aDecoderdecodeObjectForKey:@author];}returnself;}intmain(intargc,constchar*argv[]){BookObj*bookObj=[[BookObjalloc]initWithName:@iPhone编程指南author:@David];[NSKeyedArchiverarchiveRootObject:bookObjtoFile:@bookObj.plist];NSLog(@SuccesstoarchivefilebookObj.plist!);BookObj*bookOb=[NSKeyedUnarchiverunarchiveObjectWithFile:@bookObj.plist];NSLog(@Thebooknameis:%@,bookOb.author);return0;}@end/==============================================================下面镔哥具体介绍一下plist文件和NSCoding协议在做iOS开发时,经常用到到plist文件,那plist文件是什么呢?
它全名是:PropertyList,属性列表文件,它是一种用来存储串行化后的对象的文件。
属性列表文件的扩展名为.plist,因此通常被称为plist文件。
文件是xml格式的。
Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息1、创建项目Plistdemo项目创建之后可以找到项目对应的plist文件,打开如下图所示:
在编辑器中显示类似与表格的形式,可以在plist上右键,用源码方式打开,就能看到plist文件的xml格式了。
2、创建plist文件。
按commandN快捷键创建,或者FileNewNewFile,选择MacOSX下的PropertyList
创建plist文件名为plistdemo。
打开plistdemo文件,在空白出右键,右键选择Addrow添加数据,添加成功一条数据后,在这条数据上右键看到valueType选择Dictionary。
点加号添加这个Dictionary下的数据
添加完key之后在后面添加Value的值,添加手机号和年龄创建完成之后用sourcecode查看到plist文件是这样的:?xmlversion=1.0encoding=UTF-8?!DOCTYPEplistPUBLIC-//Apple//DTDPLIST1.0//ENhttp://www.apple.com/DTDs/PropertyList-1.0.dtdplistversion=1.0dictkeyjack/keydictkeyphone_num/keystring13801111111/stringkeyage/keystring22/string/dictkeytom/keydictkeyphone_num/keystring13901111111/stringkeyage/keystring36/string/dict/dict/plist3、读取plist文件的数据现在文件创建成功了,如何读取呢,实现代码如下:-(void)viewDidLoad{[superviewDidLoad];//读取plistNSString*plistPath=[[NSBundlemainBundle]pathForResource:@plistdemoofType:@plist];NSMutableDictionary*data=[[NSMutableDictionaryalloc]initWithContentsOfFile:plistPath];NSLog(@%@,data);//直接打印数据。
}打印出来的结果:[cpp]viewplaincopyPlistDemo[6822:f803]{jack={age=22;phone_num=13801111111;};tom={age=36;phone_num=13901111111;};}这样就把数据读取出来了。
4、创建和写入plist文件在开发过程中,有时候需要把程序的一些配置保存下来,或者游戏数据等等。
这时候需要写入Plist数据。
写入的plist文件会生成在对应程序的沙盒目录里。
接着上面读取plist数据的代码,加入了写入数据的代码,strong-(void)viewDidLoad{[superviewDidLoad];//读取plistNSString*plistPath=[[NSBundlemainBundle]pathForResource:@plistdemoofType:@plist];NSMutableDictionary*data=[[NSMutableDictionaryalloc]initWithContentsOfFile:plistPath];NSLog(@%@,data);//添加一项内容[datasetObject:@addsomecontentforKey:@c_key];//获取应用程序沙盒的Documents目录NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*plistPath1=[pathsobjectAtIndex:0];//得到完整的文件名NSString*filename=[plistPath1stringByAppendingPathComponent:@test.plist];//输入写入[datawriteToFile:filenameatomically:YES];//那怎么证明我的数据写入了呢?
读出来看看NSMutableDictionary*data1=[[NSMutableDictionaryalloc]initWithContentsOfFile:filename];NSLog(@%@,data1);//Doanyadditionalsetupafterloadingtheview,typicallyfromanib.}/strong在获取到自己手工创建的plistdemo.plist数据后,在这些数据后面加了一项内容,证明输入写入了。
怎么证明添加的内容写入了呢?
下面是打印结果:
NSCoding协议由于Sqlite数据库的blob数据和NSData的兼容比较好,我想尝试把一个NSArray存入Sqlite。
Sqlite不支持数组的直接存储,所以我寻找了一些数组转化为NSData的方法。
网上大多数的解决办法都是针对于字符数组,eg:
转换回来也很简单,把NSData转换成NSString,然后将NSString分割(这也就是我们为str添加末尾,的原因),eg:
无意间看到了一个网站,我看到了一个方法,运用的是归档,下面我们来说一下这个方法的实现,eg:
转换回去也同样是一句话哦:),eg:
?
不是很,是太方便了吧。
但是这个时候问题又来了,我如果在数组里存放的不是NSString类型的对象呢,如果存了自定义的类,是否也可以自动跳转呢?
(有点异想天开。
。
),于是我自己创建了一个Student类,尝试相同的方式转换,发现程序无法运行了,问了同事,他告诉了我这个秘密。
原来所有原生的类都是实现了NSCoding协议,在归档的过程中进行了转码,所以才可以归档成功。
我研究了一下NSCoding协议,下面是API给我们的信息:
1
今天小编要和大家分享的是微信指纹支付怎么关闭,希望能够帮助到大家。01、首先在我们的手机桌面上找到微信并点击它,如下图所示。...