六:数据存储的五种方式(一)

  iOS开发中数据存在五种存储方式之三:

    1.plist(XML属性列表归档)

    2.偏好设置

    3.NSKeydeArchiver归档(存储自定义对象)

一、plist(XML属性列表归档)只能存取对象类文件

第一种方式:(四个文件夹都可以取出路径)

1 //获取沙盒路径
2     NSString *home = NSHomeDirectory();
3     //获取documents的路径两种方式(其它三个文件夹也能获取)
4     NSString *path = [home stringByAppendingString:@"/documents"];
5     NSString *path1 = [home stringByAppendingPathComponent:@"library/cache"];

第二种方式:(仅有documents和cache能取出路径)(获取路径的时候必须写成YES,否则无法成功写入)

1  //获取cache路径,NO表示文件路径前面用“~”表示
2 NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) lastObject];
3 NSString *doucument = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];
4 //拼接路径
5 NSString *path = [cache stringByAppendingPathComponent:@"abc.plist"];
6 NSString *path1 = [doucument stringByAppendingPathComponent:@"/ce.plist"];
7 //把文件写入文件夹
8 [arr writeToFile:path atomically:YES];
9 [arr writeToFile:path1 atomically:YES];

读取文件:

1 //读取文件
2 NSArray *arr1 =  [NSArray arrayWithContentsOfFile:path];
3 NSLog(@"%@",arr1);

二、偏好设置(保存用户名、密码、字体大小、是否自动登录等等基本设置)自动保存到沙盒的Preferences文件夹中

1 //获取对象
2 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
3 //存储数据
4 [ud setObject:@"abc" forKey:@"这是什么"];
5 [ud setObject:@"cde" forKey:@"俺是"];
6 //读取数据
7 NSString *str = [ud objectForKey:@"俺是"];
8 NSString *str1 = [ud objectForKey:@"这是什么"];
9 NSLog(@"%@---%@",str,str1);

注意:偏好设置存储时候,保存的时间不确定,可能是将来的某个时间存储到文件夹中,所以可以马上同步存储:

[ud synchronize];

三、NSKeyedArchive的归档(存储自定义对象)

在viewController.m中:

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3
 4     ZWPerson *p = [[ZWPerson alloc] init];
 5     p.name = @"mc";
 6     p.age = 18;
 7     p.height = 1.88;
 8     NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) lastObject];
 9     NSString *doucument = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];
10     //拼接路径
11     NSString *path = [cache stringByAppendingPathComponent:@"abc.doc"];
12     NSString *path1 = [doucument stringByAppendingPathComponent:@"/ce.doc"];
13     //存储数据
14     BOOL ar = [NSKeyedArchiver archiveRootObject:p toFile:path];
15     BOOL ar1 = [NSKeyedArchiver archiveRootObject:p toFile:path1];
16     NSLog(@"%d---%d",ar,ar1);
17     //读取数据
18     ZWPerson *p1 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
19     ZWPerson *p2 = [NSKeyedUnarchiver unarchiveObjectWithFile:path1];
20     NSLog(@"%zd---%@",p1.age,p2.name);
21 }

新建ZWPerson类(继承自ViewController)

在ZWPerson.h中:

1 #import "ViewController.h"
2 @interface ZWPerson : ViewController
3 /** 名字 */
4 @property (strong, nonatomic)NSString *name;
5 /** 年龄 */
6 @property (assign, nonatomic)NSInteger age;
7 /** 身高 */
8 @property (assign, nonatomic)double height;
9 @end

在ZWPerson.h中:

 1 #import "ZWPerson.h"
 2 @interface ZWPerson ()
 3 @end
 4 @implementation ZWPerson
 5 //存储的时候调用这个方法
 6 - (void)encodeWithCoder:(NSCoder *)aCoder
 7 {
 8     //存储对象的属性(根据实际需要存储数据)
 9     [aCoder encodeObject:self.name forKey:@"name"];
10     [aCoder encodeInteger:self.age forKey:@"age"];
11     [aCoder encodeDouble:self.height forKey:@"height"];
12 }
13 //读取的时候调用
14 - (instancetype)initWithCoder:(NSCoder *)aDecoder
15 {
16     if (self = [super initWithCoder:aDecoder]) {.
17         //获取对象的属性(根据实际需要获取数据)
18         self.name = [aDecoder decodeObjectForKey:@"name"];
19         self.age = [aDecoder decodeIntegerForKey:@"age"];
20         self.height = [aDecoder decodeDoubleForKey:@"height"];
21     }
22     return self;
23 }
24 @end

如果是继承自NSObject:则只需要更改initWithCoder中的if(self = super init)即可

注意:1、遵守NSCoding协议,并实现该协议中的两个方法。

     2、如果是继承,则子类一定要重写那两个方法。因为person的子类在存取的时候,会去子类中去找调用的方法,没找到那么它就去父类中找,所以最后保存和读取的时候新增加的属性会被忽略。需要先调用父类的方法,先初始化父类的,再初始化子类的。

     3、保存数据的文件的后缀名可以随意命名。

     4、通过plist保存的数据是直接显示的,不安全。通过归档方法保存的数据在文件中打开是乱码的,更安全。

时间: 2024-10-08 20:04:29

六:数据存储的五种方式(一)的相关文章

Andriod中数据存储的五种方式

数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在 Activity中 重载窗

android 数据存储的几种方式

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理. 对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络.但从开发者的

Android数据存储的五种方法汇总

本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

iOS数据存储的几种方式

iOS的数据存储是iOS应用开发的重要知识点: 关于这方面知识,网上有很多介绍,但对于代码层次的使用方式并未有系统全面介绍.此文章针对iOS稍熟悉的童鞋,需要对CoreData的原理有一定的了解.目前存储方式大概有以下几种: NSKeyedArchiver  适用简单数据加密 NSUserDefaults  适用配置参数 Write  文件操作,同NSKeyedArchiver SQLite3  操作较复杂,不建议使用. CoreData  取代SQLite3,但要遵循NSManagedObje

EDM营销之数据细分的五种方式

我们都知道,EDM营销的终极目的仍然是与目标客户群体实现联接,拉动销售业绩.内容是B2B邮件营销的重中之重,提供能够匹配客户真实需要的有效内容,即实现B2B个性化邮件营销,是B2B邮件营销成功的关键因素.怎样实现B2B领域的个性化邮件营销呢?首先需要对B2B客户进行数据细分.结合多年来在B2B邮件营销领域的诸多成功实战经验,下面来看看 Focussend营销团队在本期为B2B营销者奉上实现B2B个性化邮件营销的五种数据细分方式. 博文配图:关于EDM营销数据细分的五种方式 方式一:按职能细分 B

Android——数据存储(四种方式之二)读写SD卡

Android--数据存储(四种方式) 1.SharedPrefereces 只能保存一些简单的数轻量级.XML  存储文件名, 数据保存在data/data/basepackage/shared_prefs/myopt.xml中    实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default) 2.读写SD卡  SD的根目录  适用于数据流读写 实现步骤:加入读写SD卡权限

Android开发之数据存储的四种方式之SharedPreferences

Android项目开发中使用的数据存储方式有:网络存储.sqlite存储.File存储和SharedPreferences存 储,四种存储方式对应的Demo别人是NetworkDemo.SqliteDemo.FileDemo和SharedPreferencesDemo, 根据应用的场景选择其中一种或多种方式,比如在登录界面验证,需要将用户名和密码通过SharedPreferences方式保存,注册信息的时候需要通 过网络将数据存储到后台数据库中.结合一个登录界面的验证,使用SharedPrefe

Android——数据存储(四种方式之二)读写SD卡——练习

1保存到SDK  --字符串方式 <span style="font-size:18px;"><strong>package com.example.jreduch08.SDK; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.