.plist文件存取 ios

2013-09-17 18:36:35 yang8456211 阅读数 1184

一、 能够储存的类型

存储在plist中的数据是经过序列化的,虽然大多数类型都能被序列化,但是却不是所有的都能够存储到plist中,以下是可以储存的数据类型:

NSArray

NSMutableArray

NSDictionary

NSMutableDictionary

NSData

NSMutableData

NSString

NSMutableString

NSNumber

NSDate


不能储存的数据类型:

UIImage

UIColor

NSURL


二、存储plist

我们看下面一个例子:

点击“保存”能够实现把姓名和学号保存plist中,点击“清除”能够清除输入的数据,点击“读取”能够从plist中读取数据并显示在输入框内。


YGViewController.h

#import <UIKit/UIKit.h>

@interface YGViewController : UIViewController
@property (retain, nonatomic) IBOutlet UITextField *nameField;//姓名输入框
@property (retain, nonatomic) IBOutlet UITextField *stuNumField;//学号输入框

- (IBAction)saveInfo:(id)sender;//储存方法
- (IBAction)loadInfo:(id)sender;//清除方法
- (IBAction)clearInfo:(id)sender;//读取方法
@end

YGViewController.m

//获得文件路径
-(NSString *)filePath{
    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [array objectAtIndex:0];
    NSString *full_path = [path stringByAppendingPathComponent:@”file.plist”];
    return full_path;
}

      进行储存之前我们需要知道储存的路径,iOS中使用NSSearchPathForDirectoriesInDomains方法能够获得当前应用的路径。

      NSDocumentDirectory参数意味着我们想要把搜索Documents文件夹的路径(一般数据都会存储在Documents里),NSUserDomainMask参数意味着搜索范围在当前沙盒内,stringByAppendingPathComponent为添加file.plist到路径的最后。

//储存信息到plist
- (IBAction)saveInfo:(id)sender {
    NSMutableArray *array = [[NSMutableArray alloc]init];
    [array addObject:_nameField.text];
    [array addObject:_stuNumField.text];
    [array writeToFile:[self filePath] atomically:YES];//写入plist
    [array release];
}

建立数组之后,添加数据,调用writeToFile:atomically 方法就能写入plist了。

//从plist中读取数据
- (IBAction)loadInfo:(id)sender {
    NSString *filePath = [self filePath];
    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
        //文件存在
        NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];
        _nameField.text = [array objectAtIndex:0];
        _stuNumField.text = [array objectAtIndex:1];
        [array release];
    }
    else{
        NSLog(@"文件不存在,读取失败");
    }
}

[NSFileManagerdefaultManager]fileExistsAtPath:filePath]为判断文件是否存在,不存在则不进行读取操作。

//清除数据
- (IBAction)clearInfo:(id)sender {
    [_nameField setText:nil];
    [_stuNumField setText:nil];
}
@end


 



atany原创,转载请注明博主与博文链接,未经博主允许,禁止任何商业用途。

博文地址:http://blog.csdn.net/yang8456211/article/details/11783823

博客地址:http://blog.csdn.net/yang8456211

—— by atany





2015-10-07 11:03:00 weixin_30611509 阅读数 39
每次在Xcode中新建一个iOS项目后,都会自己产生一个.plist文件,里面记录项目的一些配置信息。我们也可以自己创建.plist文件来进行数据的存储和读取。
 
.plist文件其实就是一个XML格式的文件,其支持的数据类型有(NS省略)Dictionary、Array、Boolean、Data、Date、Number、String这些类型。
当然对于用户自定义的对象,通过NSCoder转换后也是可以进行存储的。(常见我的另一篇文章“Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)”)

本文主要介绍如何使用.plist文件进行数组,字典,字符串等这些基本数据类型的存储和读取。
由于不需要转化,所以用起来还是很方便的。而且在大多数情况下,使用基本数据类型就足够了。

1,数组(Array)的存储和读取
(1)存储
下面把一个数组写入plist文件中(保存在用户文档目录),数组内是各个网站的地址。
1
2
3
let array = NSArray(objects: "hangge.com","baidu.com","google.com","163.com","qq.com")
let filePath:String = NSHomeDirectory() + "/Documents/webs.plist"
array.writeToFile(filePath, atomically: true)
进入目录打开webs.plist,可以看到生成的数据如下:
原文:Swift - .plist文件数据的读取和存储

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>hangge.com</string>
    <string>baidu.com</string>
    <string>google.com</string>
    <string>163.com</string>
    <string>qq.com</string>
</array>
</plist>

(2)读取
下面把webs.plist文件中数据读取出来显示在表格里
原文:Swift - .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
import UIKit
 
class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{
 
     
    @IBOutlet weak var tableView: UITableView!
     
    var webs:NSArray?
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        webs = NSArray(contentsOfFile: NSHomeDirectory() + "/Documents/webs.plist")
        self.tableView!.delegate = self
        self.tableView!.dataSource = self
        //创建一个重用的单元格
        self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell0")
    }
     
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return webs!.count
    }
     
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
        -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell0",
            forIndexPath: indexPath) as UITableViewCell
        let url = webs![indexPath.row] as! String
        cell.textLabel?.text = url
        return cell
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

2,字典(Dictionary)的存储和读取 
下面给每条网址都附上网站名,这时我们就要使用字典了。
(1)存储
除了每条网站记录使用字典类型,外面还拆分成两个数组分别存储,用于下面表格的分区展示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let myArray = [
        [
            ["name":"航歌", "url":"hangge.com"],
            ["name":"百度", "url":"baidu.com"],
            ["name":"google", "url":"google.com"]
        ],
        [
            ["name":"163", "url":"163.com"],
            ["name":"QQ", "url":"qq.com"]
        ]
   //声明一个字典
         
let filePath:String = NSHomeDirectory() + "/Documents/webs.plist"
NSArray(array: myArray).writeToFile(filePath, atomically: true)
print(filePath)
进入目录打开webs.plist,可以看到生成的数据如下:
原文:Swift - .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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <array>
        <dict>
            <key>name</key>
            <string>航歌</string>
            <key>url</key>
            <string>hangge.com</string>
        </dict>
        <dict>
            <key>name</key>
            <string>百度</string>
            <key>url</key>
            <string>baidu.com</string>
        </dict>
        <dict>
            <key>name</key>
            <string>google</string>
            <key>url</key>
            <string>google.com</string>
        </dict>
    </array>
    <array>
        <dict>
            <key>name</key>
            <string>163</string>
            <key>url</key>
            <string>163.com</string>
        </dict>
        <dict>
            <key>name</key>
            <string>QQ</string>
            <key>url</key>
            <string>qq.com</string>
        </dict>
    </array>
</array>
</plist>
(2)读取
下面把webs.plist文件中数据读取出来,并在表格里分区显示
原文:Swift - .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
import UIKit
 
class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{
     
    @IBOutlet weak var tableView: UITableView!
     
    var webs:NSArray?
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        webs = NSArray(contentsOfFile: NSHomeDirectory() + "/Documents/webs.plist")
        self.tableView!.delegate = self
        self.tableView!.dataSource = self
        //创建一个重用的单元格
        self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell0")
 
    }
     
    // UITableViewDataSource协议中的方法,该方法的返回值决定指定分区的头部
    func tableView(tableView:UITableView, titleForHeaderInSection
        section:Int)->String?
    {
        return " ";
    }
     
    //在本例中,有2个分区
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return webs!.count;
    }
     
    //每个分区的记录数
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let data = self.webs?[section]
        return data!.count
    }
     
    //每个单元格创建和内容赋值
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
        -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.Value1,
            reuseIdentifier: "cell0")
        let data = self.webs?[indexPath.section]
        let url = data![indexPath.row]["url"] as! String
        let name = data![indexPath.row]["name"] as! String
        cell.textLabel?.text = name
        cell.detailTextLabel?.text = url
        return cell
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_888.html

转载于:https://www.cnblogs.com/Free-Thinker/p/4858379.html

2016-06-21 16:01:36 sinat_28709097 阅读数 572


iOS数据持久化之一——plist文件

iOS开发中,我们时常会将一些简单的数据进行持久化的存储,方便我们保存程序的一些配置和用户的一些数据,plist文件就是我们保存这些数据的最佳选择。

一、何为plist

plist是一种文件格式,其内容规则是xml文件,后缀为.plist,因此,我们更习惯于成它问plist文件,在iOS开发中,这种文件常用来保存一些简单的配置数据,例如项目中的info.plist。

通过plist文件编辑器,我们可以很方便的查看和编辑层次清晰的plist文件。



二、通过操作plist文件进行数据持久化的几种方式


1、在项目包中手动创建一个plist文件,通过代码对其进行操作

这种方式创建的plist文件非常自由且直观,我们可以创建多个根据功能进行分类存储,并且可以通过Xcode的可视化工具进行可视化的修改。

首先,我们新创建一个文件,在Resource中选择 Property List文件:



之后,我们通过Xcode,在其中添加一些数据:



通过代码,我们来获取这些数据:

//获取myInfo文件地址

NSString * path = [[NSBundle mainBundle]pathForResource:@"myInfo" ofType:@"plist"];

NSMutableDictionary * dic =[NSMutableDictionary dictionaryWithContentsOfFile:path];

NSLog(@"%@",dic);

打印结果如下:

这种方式添加的plist文件,我们只能在xcode中配置好,然后再程序中读取使用,但是不能在程序中修改这些数据,可以应用于一些固定的数据的存储,例如地图的属性,省市县列表等。


2、在沙盒目录中创建和使用plist文件

我们还可以通过代码在沙盒中创建我们自己的plist文件,进行数据的存储。同时可以支持add,delete,replace,find等操作。

//获取沙盒目录

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

NSString *plistPath1 = [paths objectAtIndex:0];

//得到完整的文件名

NSString *filename=[plistPath1 stringByAppendingPathComponent:@"my.plist"];

NSDictionary * dic = @{@"my":@"haha"};

[dic  writeToFile:filename atomically:YES];

//取数据

NSDictionary * getDic = [NSDictionary dictionaryWithContentsOfFile:filename];

NSLog(@"%@",getDic);

打印如下:



这种方式无疑会更加安全,存取也更加自由。

2016-09-20 19:37:58 journey2012 阅读数 2767
    存数据
    数据存储是保存在手机里面的
   plist文件存储一般都是存取字典和数组,直接写成plist文件,把它存到应用沙盒当中.
    只有在ios当中才有plist存储,它是ios特有的存储方式.
    获取沙盒根根路径,每一个应用在手机当中都有一个文件夹,这个方法就是获取当前应用在手机里安装的文件.
   NSString *homeDir = NSHomeDirectory();
   NSArray*array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
   NSString*cachePath = array[0];
   NSString*filePathName = [cachePathstringByAppendingPathComponent:@"xiaomi.plist"];
   NSDictionary*dict =@{@"age":@18,@"name":@"xiaomi"};
   [dictwriteToFile:filePathNameatomically:YES];

    用数组写,plist文件当中保存的类型是数组.
   NSArray*dataArray =@[@56,@"xiaoli"];
    获取沙盒路径
   ToFile:要写入的沙盒路径
   [dataArraywriteToFile:filePathNameatomically:YES];
   
   
      读取数据
   这个方法获取出的结果是一个数组.因为有可以搜索到多个路径.
   NSArray*array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
   NSString*cachePath = array[0];
   NSString*filePathName = [cachePathstringByAppendingPathComponent:@"xiaomi.plist"];
   NSDictionary*dict = [NSDictionarydictionaryWithContentsOfFile:filePathName];
   
    如果保存的是一个数组.那就通过数组从文件当中加载.
   NSArray*dataArray = [NSArrayarrayWithContentsOfFile:filePathName];
2016-09-03 10:05:41 shuai_summer 阅读数 314

属性列表(plist文件)是一种明文的轻量级存储方式,其存储格式有多种,最常规格式为XML格式。在我们创建一个新的项目的时候,Xcode会自动生成一个info.plist文件用来存储项目的部分系统设置。plist只能用数组(NSArray)或者字典(NSDictionary)进行读取,由于属性列表本身不加密,所以安全性几乎可以说为零。因为,属性列表正常用于存储少量的并且不重要的数据。


一、创建文件

1.可视化操作

cmd+n 选中相应的选项


创建好文件之后可以手动点击“+”添加数据


2.通过代码创建

首先要选择存取在沙盒中的位置,例如现在选择存储在Document下,找到Document文件夹的路径并在此基础上拼接得到plist文件所在位置,用文件管理类NSFileManager创建文件。


然后开始在plist文件中添加数据:



二、读取文件

1.可视化创建的直接就可以在工程的文件中查看

2.代码创建的同样需要代码来读取,也可以打印出路径,前往文件夹查看