iOS开发数据存储-plist

作者: DreamerForever | 来源:发表于2017-08-04 15:07 被阅读0次

开发中会遇到一些数据的存储,有些人可能会说了,前段开发不需要什么数据存储,应该交给后台来做,我们只需要跟后台进行交互就好了,但是一些轻量级的数据,还是需要我们自己来存储的,比如登录状态,登录成功后的一些常用数据:userID,userName,headViewUrl,电话号码啊等等,一些操作需要用到的数据,都是需要我们来进行存储的,这样可以减少一些服务器压力,设想一下,如果所有的信息都需要网络请求,拂去其压力该的多大。好了,废话不多说,我们来说说,iOS开发中的数据存储。

iOS开发中遇到一些轻量级的数据,通常是由我们存储到本地的。常用到的数据存储(这里统统指的是轻量级数据)的方式一般有:NSUserDefault、Keychain、Plist、CoreData、FMDB、归档等方式。比如用户ID,登录状态、username等不是隐私性特别强的话,一般都会用NSUserDefault,比如电话号码之类稍微有点关于用户隐私的用KeyChain存储,等等。每种方式都有每种方式的特点,这里我们说一下plist存储。

应用场景:这两天在做一个应用,其中有这样一个场景是,我们要存储多条数据,这多条数据key值相同,每次存储不能覆盖。刚一开始我想用NSUserDefault来做,但是好像不太符合NSUserDefault存储的特点,不是很方便,因为需求有点类似于数据库中的表。所以就想到了plist来做。

plist文件可以手动创建也可以代码创建,我这里是代码创建的,因为我要动态的修改plist,类似于数据库中的增删改查。如果你已经有了固定的数据,可以xcode种创建plist,然后添加你的数据,在需要的地方进行读取,我这边因为数据不固定,所以用代码的方式创建。

1)在你需要添加数据的地方写:

NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsPath = [path objectAtIndex:0];

NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"notes.plist"];

我这边是字典的方式存储多条数据,所以,先用字典存储,然后将字典放到数组中,将数组写入plist文件,这样就可以保证多条存储,存储的数据也不会将上一条数据覆盖。

//赋值

NSMutableDictionary * newsDict = [NSMutableDictionary dictionary];

[newsDict setObject:self.titleFiled.text forKey:@"title"];

[newsDict setObject:self.notestextView.text forKey:@"notes"];

[newsDict setObject:[NSString currtenDate] forKey:@"date"];

[self.notesDatas addObject:newsDict];

//数据写入plist

[self.notesDatas writeToFile:plistPath atomically:YES];这里将数组写入了文件。

之后你会发现一个问题,在当前界面操作时没有问题,去别的界面读数据也没问题,但是,在重新返回本界面做写入操作时,你会发现这次上次写入的数据没有了。原因时,这边的数组每次走都进行了初始化。所以每次都是一个全新的数组,但是初始化还不能省略。解决办法是什么呢?

2)我每次这进入这个界面时先将文件中的数据全部取出来,放到self.notesDatas这个数组中,然后写入时就会将所有的数据写入了。

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

self.navigationItem.title = @"Add";

//下面是读取数据

NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *path1 = [pathArray objectAtIndex:0];

NSString *myPath = [path1 stringByAppendingPathComponent:@"notes.plist"];

NSMutableArray*data2 = [[NSMutableArray alloc] initWithContentsOfFile:myPath];

self.notesDatas = [NSMutableArray array];

if (data2.count) {

[self.notesDatas addObjectsFromArray:data2];

}

[self createUI];

}

3)展示数据

两一个控制器内用tableview展示存储的数据,这里的操作跟上一步取数据是一样的,如果存的字典,就用字典接收,如果是数组就用数组接受,这里附上代码,需求不同代码也不同,所以只是参考,按照自己的需求改变。

-(void)viewWillAppear:(BOOL)animated{

NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *path1 = [pathArray objectAtIndex:0];

NSString *myPath = [path1 stringByAppendingPathComponent:@"notes.plist"];

NSMutableArray*data2 = [[NSMutableArray alloc] initWithContentsOfFile:myPath];

self.notesDatas = [NSMutableArray array];

[self.notesDatas addObjectsFromArray:data2];

[self.tableView removeFromSuperview];

[self.imageVIew removeFromSuperview];

if (data2.count) {

[self createTableview];

}else{

[self createimgeView];

}

}

相关文章

  • iOS开发-数据存储SQLite介绍

    iOS中数据存储 1.开发中、常见的数据存储有一下几种● Plist(NSArray\NSDictionary)●...

  • 数据存储

    iOS应用数据存储的常用方式 1. Plist存储(属性列表) Plist存储(Documents) Plist提...

  • 数据存储之NSKeyedArchiver

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • 数据存储之CoreData(基础)

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • 数据存储之FMDB

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • 数据存储之Plist文件读写

    ios开发常用的五种数据存储方式: plist NSUserDefault NSKeyedArchiver FMD...

  • 数据存储之NSUserDefaults

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • iOS数据存储

    iOS应用数据存储方式(XML属性列表-plist) 一、ios应用常用的数据存储方式 1.plist(XML属性...

  • iOS开发数据存储-plist

    开发中会遇到一些数据的存储,有些人可能会说了,前段开发不需要什么数据存储,应该交给后台来做,我们只需要跟后台进行交...

  • iOS本地数据持久化

    在iOS开发中常常需要将本地数据存储起来 通常有如下几种方式 plist存储 偏好设置存储 归档存储 SQLite...

网友评论

    本文标题:iOS开发数据存储-plist

    本文链接:https://www.haomeiwen.com/subject/oqivlxtx.html