数据层永远是程序的核心结构之一,coreData.今天复习的是plist文件读写.

2019-11-26 作者:联系我们   |   浏览(51)

数码长久化-Plist文件写入,-plist写入

数量持久化,常见4种:归档,plist文件,sqlite,coreData.前天复习的是plist文件读写.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 // //  ViewController.m //  Test_Plist // //  Created by lidongbo on 14/10/30. //  Copyright (c) 2014年 lidongbo. All rights reserved. //   #import "ViewController.h"   @interface ViewController ()   @end   @implementation ViewController   - (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view, typically from a nib.           /*      读取plist文件的内容.      */     NSString * path = [[NSBundle mainBundle] pathForResource:@"Person" ofType:@"plist"];     NSMutableDictionary * data = [[NSMutableDictionary alloc] initWithContentsOfFile:path];     NSLog(@"%@",data);           /*      获取Document文件夹中plist文件的路径      */     NSMutableArray * mArr = [[NSMutableArray alloc] initWithObjects:@"英语",@"数据",@"法语",@"日语",@"德语"nil];     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYES);     NSString * plistPath = [paths objectAtIndex:0];     NSLog(@"%@",plistPath);       //    NSString * fileName = [plistPath stringByAppendingString:@"/Person.plist"];     NSString * fileName = [plistPath stringByAppendingPathComponent:@"Person.plist"];           /*         赋值      */     [data setObject:mArr forKey:@"kemu"];     [data setObject:@"14" forKey:@"age"];     /*      plist文件写入      */     [data writeToFile:fileName atomically:YES];       NSMutableDictionary * data1 = [[NSMutableDictionary alloc] initWithContentsOfFile:fileName];     NSLog(@"%@",data1);           /*      plist文件可以多次写入.      */     NSMutableArray * mmArr = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3"nil];     [data setObject:mmArr forKey:@"kemu"];           [data writeToFile:fileName atomically:YES];           NSMutableDictionary * data2 = [[NSMutableDictionary alloc] initWithContentsOfFile:fileName];     NSLog(@"______%@",data2);                     }   - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. }   @end

数据持久化,多如牛毛4种:归档,plist文件,sqlite,coreData.前不久复习的是plist文件读写. 123456789101112131415161718一九一八2...

数码长久化-Plist文件写入,-plist写入

数量长久化,不足为道4种:归档,plist文件,sqlite,coreData.前不久复习的是plist文件读写.

//
//  ViewController.m
//  Test_Plist
//
//  Created by lidongbo on 14/10/30.
//  Copyright (c) 2014年 lidongbo. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    /*
     读取plist文件的内容.
     */
    NSString * path = [[NSBundle mainBundle] pathForResource:@"Person" ofType:@"plist"];
    NSMutableDictionary * data = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    NSLog(@"%@",data);

    /*
     获取Document文件夹中plist文件的路径
     */
    NSMutableArray * mArr = [[NSMutableArray alloc] initWithObjects:@"英语",@"数据",@"法语",@"日语",@"德语", nil];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * plistPath = [paths objectAtIndex:0];
    NSLog(@"%@",plistPath);

//    NSString * fileName = [plistPath stringByAppendingString:@"/Person.plist"];
    NSString * fileName = [plistPath stringByAppendingPathComponent:@"Person.plist"];

    /*
        赋值
     */
    [data setObject:mArr forKey:@"kemu"];
    [data setObject:@"14" forKey:@"age"];
    /*
     plist文件写入
     */
    [data writeToFile:fileName atomically:YES];

    NSMutableDictionary * data1 = [[NSMutableDictionary alloc] initWithContentsOfFile:fileName];
    NSLog(@"%@",data1);

    /*
     plist文件可以多次写入.
     */
    NSMutableArray * mmArr = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil];
    [data setObject:mmArr forKey:@"kemu"];

    [data writeToFile:fileName atomically:YES];

    NSMutableDictionary * data2 = [[NSMutableDictionary alloc] initWithContentsOfFile:fileName];
    NSLog(@"______%@",data2);




}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

       在前后相继支付中,数据层长久是程序的基本结构之生龙活虎。对数据的加工管理是代码中能浮现手艺水平的一大模块,比方数据的乞求、剖析、缓存、长久化。在iOS中,数据长久化有多样方案能够选用,那几个方案分别是性质列表(plist卡塔尔国、数据归档(NSKeyedValueArchiver/NSUserDefaults卡塔尔、数据库(sqlite卡塔 尔(英语:State of Qatar)和coreData。它们的分别如下:

在程序支付中,数据层永恒是程序的骨干结构之风流倜傥。大家将具体育赛事物进行抽象,使之成为三个个数量。对那么些多少的加工管理是代码中能展现本领水平的一大模块,比方数据的号召、深入深入分析、缓存、悠久化等等。适当的对数据开展持久化存款和储蓄能够完结利用的离线成效,以此抓牢客户体验。在iOS开辟中,苹果提供了各类持久化方案供大家筛选。那个方案分别满含属性列表(plist)、数据归档(NSKeyedValueArchiver/NSUserDefaults)、数据库(sqlite)和coreData等,它们的分别如下

plist文件怎写入?

呵呵,开掘工程中的plist文件并从未被改成是没有错,因为工程中的plist被打包进.app,经过代码签字,是只读的小心那句话: NSString *Path = [NSString stringWithFormat:@"%@data.plist",NSTemporaryDirectory()];写入的是NSTemporaryDirectory(),你用NSLog打字与印刷一下探访这一个Temp目录在哪些地点,通晓一下最终再去复习/学习一下 SandBox /沙箱 的概念原理, 就大概乐Good Luck~  

性情列表

       属性列表是生机勃勃种公开的轻量级存款和储蓄情势,其储存格式有多种,最常规格式为XML格式。在大家成立多个新的类别的时候,Xcode会自动生成三个info.plist文件用来囤积项指标有的系统设置。plist只可以用数组(NSArray)可能字典(NSDictionary)进行读取,由于天性列表本人不加密,所以安全性差不离能够说为零。因为,属性列表正常用于存款和储蓄少许的还要不根本的多少。

其优点是像字典同样的赋值格局有利简单,但劣势是回天乏术积存自定义的多寡。

图片 1

iphone开发 怎写入plist文件

先是你的数码存在三个字典里面约等于NSDictionary里,有叁个艺术为 -writeToFile:atomically:
[dict writeToFile:@"your path/xxx.plist" atomically:YES];
读收取来好似此:
dict = [NSdictionary dictionaryWithContentsOfFile:@"your path"];  

数据持久化,听而不闻4种:归档,plist文件,sqlite,coreData.前几日复习的是plist文件读写. //// ViewController.m// Test_Pli...

多少归档/连串化

       与品质列表相反,相像作为轻量级存储的长久化方案,数据归档是進展加密管理的,数据在通过归档管理会转变到二进制数据,所以安全性要远远当先属性列表。此外利用归档方式,大家能够将复杂的对象写入文件中,并且不管添扩张少对象,将指标写入磁盘的艺术都以同黄金时代的。

       使用NSKeyedArchiver对自定义的多少进行体系化,并且保留在沙盒目录下。使用这种归档的前提是让存款和储蓄的数据模型遵循NSCoding商量并且实现其八个公约章程。(当然,如若为了进一层安全的寄放,也足以听从NSSecureCoding商业事务,那是iOS6自此新扩充的特色卡塔 尔(阿拉伯语:قطر‎

性格列表

数据库

       sqlite是二个轻量级、跨平台的微型数据库,其有着可移植性高、有着和MySql大约如出意气风发辙的数据库语句以至不要服务器就能够使用的亮点:

风流倜傥、能够积存大批量的数额,存储和寻觅的速度比极快;二、能对数据开展大气的集聚,这样比起利用对象来进展那个操作要快。

自然,它也保有明显的毛病:

一、它未有提供数据库的始建立模型式;

二、它依照C语言框架设计,没有面向对象的API,所以利用起来相比较麻烦;

三、复杂的数据模型的数目建表相对来讲相比较辛勤。

当然,我们也得以运用基于sqlite封装的开源数据库FMDB来压缩使用sqlite的工作量

品质列表是少年老成种公开的轻量级存款和储蓄格局,其积攒格式有各类,最常规格式为XML格式。在我们成立四个新的品类的时候,Xcode会自动生成一个info.plist文件用来储存项指标一些系统安装。plist只好用数组(NSArray)只怕字典(NSDictionary)举办读取,由于品质列表本人不加密,所以安全性大致能够说为零。因为,属性列表寻常用于存款和储蓄一些些的还要不主要的数量。

coreData

       coreData是苹果官方iOS5自此推出的综合型数据库,其应用了ORM(Object Relational Mapping)对象关联映射本事,将指标转变来数据,存款和储蓄在地头数据库中。coreData为了提升功效,甚至将数据存款和储蓄在分化的数据库中,且在接纳的时候将地面数据放到内部存款和储蓄器中使得访谈速度更加快。大家能够筛选coreData的数额存款和储蓄情势,包罗sqlite、xml等格式。但也多亏coreData 是完周密向对象的,其在施行效能上未有原生的数据库。除此而外,coreData具有多少表明、undo等此外职能,在坚守上是各个长久化方案最多的。

       上边已经各自介绍了四种方案的优短处,在支付中,并未有说哪个种类长久化方案是最棒的,只好说在差异开垦情形下,最切合接收的悠久化方案。

下边大家来看一下那各个艺术的用法:

在前后相继运维后,系统会活动成立三个NSUserDefaults的单例对象,大家得以获得这几个单例来存款和储蓄一点点的多少,它会将出口存款和储蓄在.plist格式的文本中。其独特之处是像字典相似的赋值情势有利轻易,但劣势是无法积累自定义的数量。

1.属性列表

用到的主要类:NSUserDefaults

行使形式

存取

图片 2

多少归档/体系化

2.数码归档/体系化

要使用归档,对象必得达成NSCoding合同。大多数OC对象都切合NSCoding公约,也足以在自定义对象中落到实处NSCoding公约,要促成NSCoding协议,完成五个点子:

- (void) encodeWithCoder:(NSCoder *)encoder 与 -(void)initWithCoder:(NSCoder *)encoder

何况,提出对象也同期达成NSCopying公约,该公约允许复制对象,要完毕NSCopying合同须落到实处-(id)copyWithZone:(NSZone *)zone 方法 。

在ViewController.m中

 遵从公约

图片 3

存数据

图片 4

取数据

图片 5

在ViewController2.h中

图片 6

在ViewController2.m中

图片 7

与质量列表相反,相通作为轻量级存款和储蓄的长久化方案,数据归档是进行加密管理的,数据在经过归档管理会转变到二进制数据,所以安全性要远远不仅属性列表。别的利用归档方式,大家能够将复杂的指标写入文件中,而且不管添扩张少对象,将目的写入磁盘的艺术都以雷同的。

3.数据库

至于SQLite的花费资料很多,这里不再细说。只是提出不间接操作SQLite库,而是选拔局地开源的第三方库来张开操作。比方:

FMDB:https://github.com/ccgus/fmdb.git

对SQLite都做了科学的包裹。

行使NSKeyedArchiver对自定义的数量开展类别化,并且保留在沙盒目录下。使用这种归档的前提是让存款和储蓄的数据模型据守NSCoding和煦而且达成其多个左券章程。(当然,要是为了进一层安全的仓库储存,也能够信守NSSecureCoding商谈,那是iOS6随后新添的性状卡塔 尔(阿拉伯语:قطر‎

4.coreData

Core Data本质上是行使SQLite保存数据,不过它不必要编写制定任何SQL语句。要利用Core Data,须要在Xcode中的数据模型编辑器中希图好各类实体以至定义好他们的天性和涉嫌。之后,通过操作那几个目的,结合Core Data完结多少的长久化:

利用格局:http://www.jianshu.com/p/4411f507dd9f

数据库

sqlite是八个轻量级、跨平台的Mini数据库,其独具可移植性高、有着和MySql差相当的少生龙活虎致的数据库语句以致不要服务器就可以使用的帮助和益处:

意气风发、能够积存大量的多少,存款和储蓄和探求的快慢非常快;二、能对数码进行大量的汇集,那样比起选用对象来开展这几个操作要快。

理之当然,它也装有明显的后天不良:

意气风发、它从未提供数据库的创始格局;

二、它依据C语言框架设计,未有面向对象的API,所以采纳起来比较麻烦;

三、复杂的数据模型的数目建表相对来说比较勤奋。

本来,大家也得以利用基于sqlite封装的开源数据库FMDB来压缩使用sqlite的工作量

coreData

coreData是苹果官方iOS5过后推出的综合型数据库,其利用了ORM(Object Relational Mapping)对象关系映射手艺,将目的调换到数据,存款和储蓄在本地数据库中。coreData为了进步功能,甚至将数据存款和储蓄在差异的数据库中,且在使用的时候将本地数据放到内部存储器中使得访谈速度越来越快。大家得以接纳coreData的数据存款和储蓄方式,富含sqlite、xml等格式。但也正是coreData 是截然面向对象的,其在实施效能上不比原生的数据库。除此而外,coreData具有数据证实、undo等任何职能,在作用上是各个长久化方案最多的。

下边已经各自介绍了八种方案的优劣点,在支付中,并不曾说哪类悠久化方案是最佳的,只好说在不一样开拓景况下,最符合采纳的长久化方案。上边大家将用代码实战的法子对那些悠久方案展开更为详实的摸底

质量列表

在我们每回成立新的门类的时候,Xcode扶持大家转换了Info.plist文件,里面累积了关于项目名字、版本、bundle id等等主要消息,那么些plist文件也是逆向工程(越狱卡塔 尔(阿拉伯语:قطر‎中获取app数据的主要文件。OK,那么什么样情况下用plist存款和储蓄呢?打个倘使,近年来在贯彻集团项目专门的学业的时候,须求接受选取器(UIPickerView卡塔尔国给顾客筛选所在城市。对于都市数量,并未加密的必不可少,况兼此时使用plist会到达越来越高级中学一年级些的效用。既然已经知晓须要的多少,那么超级轻巧就得得出省-市那样的生龙活虎对多的数据类型,我们的plist使用字典,将省份作为key,存款和储蓄对应的城市的数组作为value

1、创建plist文件。New Files -> iOS -> Resource -> Property List -> Next

图片 8

2、给这几个plist文件命名cities,点击Create后成立好。然后大家选中Root,暗许已然是字典的数据结构存款和储蓄了,我们点击Root左边的加号增添一些键值对,然后修正左边包车型地铁key的文字,况且将每叁个key对应的value设置为Array数组

图片 9

3、依照在字典中增多键值没有错办法,在装置好每一种key对应的体系之后,移动到每风姿罗曼蒂克行上边点击出现的+给每三个省份增添数组成分,並且赋值,最后效果图如下

图片 10

自然,像这种城市的plist文件百度时而就足以找到,不过成立plist的法子相信大家看完将来也就知道了。从plist读取数据的点子也很简短,苹果把读取的点子封装在NSArray跟NSDictionary中,读取步骤分为两步:

1、获取plist文件路线:

NSString * filePath = [[NSBundle mainBundle] pathForResource: @"cities" ofType: @"plist"];

2、通过数组大概字典的构造器方法成立容器:

NSDictionary * dict = [NSDictionary dictionaryWithContentsOfFile: filePath];

//NSArray * array = [NSArray arrayWithContentsOfFile: filePath];

图片 11

兑现采纳器的大约思路是用三个数组分别存款和储蓄省份以至当前当选省份的都会数组,然后在滑行pickerView的回调事件中依照选中的省区更新城市数据源。

别的,还应该有三个NSUserDefault,其援救的数额格式有:NSNumber(Integer、Float、Double等卡塔 尔(阿拉伯语:قطر‎、NSString、NSDate、NSArray(成员必得也是协助的格式类型卡塔 尔(英语:State of Qatar)、NSDictionary(同NSArray卡塔 尔(英语:State of Qatar)。其行使和读取也是充裕的粗略,像字典相同的存取情势

读取:NSString * str = [[NSUserDefaults standardUserDefaults] valueForKey: @"str"];

存储:[[NSUserDefaults standardUserDefaults] setValue: @"str" forKey: @"str"];

无差异于的也能够利用setObject:forKey:可能objectForKey:等字典存取方法

数量归档/数据体系化

本文由美高梅赌堵59599发布于联系我们,转载请注明出处:数据层永远是程序的核心结构之一,coreData.今天复习的是plist文件读写.

关键词: