每次在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,可以看到生成的数据如下:

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文件中数据读取出来显示在表格里
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,可以看到生成的数据如下:

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文件中数据读取出来,并在表格里分区显示

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

Swift - .plist文件数据的读取和存储的更多相关文章

  1. CSV文件数据如何读取、导入、导出到新的CSV文件中以及CSV文件的创建

    CSV文件数据如何读取.导入.导出到新的CSV文件中以及CSV文件的创建 一.csv文件的创建 (1)新建一个文本文档: 打开新建文本文档,进行编辑. 注意:关键字与关键字之间用英文半角逗号隔开.第一 ...

  2. C语言进行csv文件数据的读取

    C语言进行csv文件数据的读取: #include <stdio.h> #include <string.h> #include <malloc.h> #inclu ...

  3. HDF 文件数据的读取

    http://www.cams.cma.gov.cn/cams_973/cheres_docs/cheres_doc_sat.modis.1b.html一. HDF文件格式 1.概述 HDF 是美国国 ...

  4. Python之TensorFlow的数据的读取与存储-2

    一.我们都知道Python由于GIL的原因导致多线程并不是真正意义上的多线程.但是TensorFlow在做多线程使用的时候是吧GIL锁放开了的.所以TensorFlow是真正意义上的多线程.这里我们主 ...

  5. 加载plist文件数据的方法

    这个pilist文件最外面的是一个数组,数组中每一个item是一个字典,我们的目的就是为了取到每一个item字典中的内容数据 下面看代码举例 //加载数组 - (void)handleData { / ...

  6. linux使用shell 进行文件数据的读取与排序

    题目 shell脚本语言编写一个从键盘输入10名学生(含自己)的姓名. 性别.学号和家庭住址,然后按照学号排序,并将排序后的结果在屏幕上按对齐 的方式打印输出的程序. 代码 读入数据 数据排序(这里用 ...

  7. ios本地文件内容读取,.json .plist 文件读写

    ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...

  8. 黑马程序员——读取Plist文件

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ 读取Plist文件     一:新建一个plist文件,并将plist文件数据填入plist文件中,这里pli ...

  9. Pandas_数据读取与存储数据(全面但不精炼)

    Pandas 读取和存储数据 目录 读取 csv数据 读取 txt数据 存储 csv 和 txt 文件 读取和存储 json数据 读取和存储 excel数据 一道练习题 参考 Numpy基础(全) P ...

随机推荐

  1. 「Foundation」字符串

    一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1)NSArray:OC不可变数组  NSMutableA ...

  2. JS日历控件

    <input type="text" id="st" name="st" onclick="return Calendar( ...

  3. PHP自练项目中个人中心创建,修改,验证(服务器端和客户端验证)

    当注册成功到登录后进入个人中心,查看和修改自己的资料 第一步:创建个人中心: <?php //定义个常量,用来授权调用includes里面的文件 define('IN_TG',true); // ...

  4. ie条件注释还能这样写

    通过条件注释给html开始标签定义不同的class, 来区分不同版本的IE,可以在样式表中避免 样式属性hack (如 _margin-top, *float:none ) 注意: IE10+不支持条 ...

  5. StringIO模块字符串的缓存

    StringIO经常被用来作为字符串的缓存,应为StringIO有个好处,他的有些接口和文件操作是一致的,也就是说用同样的代码,可以同时当成文件操作或者StringIO操作.比如: import st ...

  6. Debian下Apache配置多域名访问

    请见Github博客:http://wuxichen.github.io/Myblog/php/2014/10/10/DebianApacheSetting.html

  7. getParameter

    近期学习JAVA的WEB开发,遇到Request中相关的getParameter方法问题.在网上找了一下.自己整理,以备以后查用. getParameter得到的都是String类型的.或者是用于读取 ...

  8. BZOJ-1007-水平可见直线-HN2008

    描写叙述 在xoy直角坐标平面上有n条直线L1,L2,-Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 比如,对于直线: L1:y=x; L2:y=- ...

  9. IPv6-only 的兼容性解决方案

    前几天Apple宣布 6月1日后所有应用必须支持IPv6-only网络 今天抽空看了下这方面的知识 首先解释下IPv6的是什么? 维基百科的定义如下:IPv6是Internet Protocol ve ...

  10. c++隐藏实例

    隐藏:是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同.此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆). 很简单略去 ...