IOS 数据存储详解及实例代码

IOS 数据存储详解及实例代码

在开发 IOS 应用程序时,数据存储是非常重要的一部分,因为应用程序需要记录用户的信息和应用程序状态。IOS 提供了几种数据存储选项,包括:

  • Property List(属性列表)
  • SQLite 数据库
  • Core Data
  • User Defaults(用户默认设置)
  • NSKeyedArchier

Property List(属性列表)

Property List 是一种序列化的文件格式,可用于存储少量结构化数据,比如字典、数组、字符串和数字。Property List 不支持存储自定义对象。一个简单的例子代码如下:

// 写入数据到 Property List
let dict : [String: Any] = [
    "name" : "John Doe",
    "age": 25,
    "email": "johndoe@example.com"
]
let fileURL = FileManager.default.urls(
    for: .documentDirectory, in: .userDomainMask
)[0].appendingPathComponent("userdata.plist")
try! (dict as NSDictionary).write(to: fileURL)

// 从 Property List 读取数据
let dict = NSDictionary(contentsOf: fileURL) as! [String: Any]
print(dict)

SQLite 数据库

SQLite 是一种轻量级的关系型数据库,可用于存储结构化数据。在 IOS 中使用 SQLite 需要导入 libsqlite3 库,可以使用第三方库 FMDB 简化开发。一个简单的例子代码如下:

// 导入 FMDB 第三方库
import FMDB

// 打开数据库并创建表
let dbURL = FileManager.default.urls(
    for: .documentDirectory, in: .userDomainMask
)[0].appendingPathComponent("userdata.sqlite")
let db = FMDatabase(url: dbURL)
if db.open() {
    let sql = """
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        age INTEGER,
        email TEXT
    );
    """
    if !db.executeStatements(sql) {
        print(db.lastErrorMessage())
    }
} else {
    print("Error: \(db.lastErrorMessage())")
}

// 插入数据
let name = "John Doe"
let age = 25
let email = "johndoe@example.com"
let success = db.executeUpdate(
    "INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
    withArgumentsIn: [name, age, email]
)
if !success {
    print(db.lastErrorMessage())
}

// 查询数据
let rs = db.executeQuery("SELECT * FROM users", withArgumentsIn: [])
while rs.next() {
    let name = rs.string(forColumn: "name") ?? ""
    let age = rs.int(forColumn: "age")
    let email = rs.string(forColumn: "email") ?? ""
    print("\(name), \(age), \(email)")
}

Core Data

Core Data 是苹果提供的一种对象关系映射(ORM)框架,可以将结果集映射到对象模型中。与 SQLite 相比,Core Data 更加高级和复杂,需要学习一些特定的概念,如实体、属性、关系等。一个简单的例子代码如下:

// 创建 Core Data 上下文
let container = NSPersistentContainer(name: "UserData")
container.loadPersistentStores { storeDescription, error in
    if let error = error {
        print("Error: \(error)")
    }
}
let context = container.viewContext

// 创建一个 User 实体对象并插入到上下文
let user = NSEntityDescription.insertNewObject(
    forEntityName: "User", into: context
) as! User
user.name = "John Doe"
user.age = 25
user.email = "johndoe@example.com"
try! context.save()

// 从 Core Data 查询数据
let request = NSFetchRequest<User>(entityName: "User")
let results = try! context.fetch(request)
for user in results {
    let name = user.name ?? ""
    let age = user.age
    let email = user.email ?? ""
    print("\(name), \(age), \(email)")
}

User Defaults(用户默认设置)

User Defaults 是 IOS 提供的一种轻量级的存储,用于存储少量的用户设置和应用程序状态。User Defaults 是基于 Property List 实现的,只能存储对象、数组和基本数据类型,不支持存储自定义对象。一个简单的例子代码如下:

// 写入数据到 User Defaults
let defaults = UserDefaults.standard
defaults.set("John Doe", forKey: "name")
defaults.set(25, forKey: "age")
defaults.set("johndoe@example.com", forKey: "email")
defaults.synchronize()

// 从 User Defaults 读取数据
let name = defaults.string(forKey: "name") ?? ""
let age = defaults.integer(forKey: "age")
let email = defaults.string(forKey: "email") ?? ""
print("\(name), \(age), \(email)")

NSKeyedArchiver

NSKeyedArchiver 是 IOS 提供的一种序列化和反序列化工具,可以将对象转换为二进制数据并存储到文件中。一个简单的例子代码如下:

// 写入数据到 NSKeyedArchiver
let user = User(name: "John Doe", age: 25, email: "johndoe@example.com")
let data = try! NSKeyedArchiver.archivedData(
    withRootObject: user, requiringSecureCoding: false
)
let fileURL = FileManager.default.urls(
    for: .documentDirectory, in: .userDomainMask
)[0].appendingPathComponent("userdata.dat")
try! data.write(to: fileURL)

// 从 NSKeyedArchiver 读取数据
let data = try! Data(contentsOf: fileURL)
let user = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(
    data
) as! User
print("\(user.name), \(user.age), \(user.email)")

以上就是 IOS 数据存储的详细讲解及实例代码,代码中包含了常用的数据存储方式,可以依据具体情况选择适合自己的方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:IOS 数据存储详解及实例代码 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • javascript 读取XML数据,在页面中展现、编辑、保存的实现

    JavaScript 可以通过浏览器内置的 XMLHttpRequest 对象从服务器获取 XML 文件,并将其转化为 JavaScript 中的对象,然后可以在页面中展现、编辑和保存数据。下面是详细的攻略: 1. 读取XML数据 使用XMLHttpRequest对象(也称为 AJAX 技术),可以通过发送请求来获取XML文件。以下是一个获取XML文件的示例…

    html 2023年5月30日
    00
  • 非常不错的WAP常见问题问答大全(二)第1/3页

    针对“非常不错的WAP常见问题问答大全(二)第1/3页”的完整攻略,我将从以下几个方面进行详细讲解: 页面结构解析 使用技巧介绍 示例说明 页面结构解析 该页面是一个WAP版的常见问题问答大全,包含多个常见问题以及对应的解答。该页面采用了Markdown的语法,使用的是该网站的默认样式。 页面总体结构如下: 页面顶部是网站的logo、导航、搜索框等元素 页面…

    html 2023年5月31日
    00
  • UltraEdit怎么设置网络浏览器?UltraEdit设置网络浏览器方法

    以下是“UltraEdit怎么设置网络浏览器?UltraEdit设置网络浏览器方法”的完整攻略: UltraEdit怎么设置网络浏览器? UltraEdit是一款功能强大的文本编辑器,可以用于编辑各种类型的文本文件。在使用UltraEdit时,有时需要使用网络浏览器来查看或编辑网页等内容。下面是一些关于UltraEdit怎么设置网络浏览器的技巧和步骤,可以帮…

    html 2023年5月18日
    00
  • JavaSE XML解析技术的使用方法详解

    JavaSE XML解析技术的使用方法详解 XML是一种常用数据传输格式,在Java开发中,对XML文件进行解析是非常常见的操作。本文将介绍JavaSE中XML解析技术的使用方法,包括常见的JavaSE XML库和XML解析API。 常见的JavaSE XML库 在JavaSE中,有多个XML库可供开发者使用,其中最常用的库包括: JAXP(Java API…

    html 2023年5月30日
    00
  • 小红书怎么样才能有收益

    以下是“小红书怎么样才能有收益”的完整攻略: 小红书怎么样才能有收益 小红书是一款社交电商平台,用户可以在平台上分享自己的购物心得和体验,并通过推广商品获得收益。下面是小红书怎么样才能有收益的攻略。 成为小红书达人 成为小红书达人是获得收益的前提条件之一。小红书达人是指在小红书上有一定影响力的用户,他们的分享和推荐可以影响其他用户的购买决策。成为小红书达人需…

    html 2023年5月18日
    00
  • 通过实例学习JAVA对象转成XML输出

    下面是通过实例学习JAVA对象转成XML输出的完整攻略。 目录 简介 JAVA对象转XML的基本思路 实例演示一:使用JAXB实现JAVA对象转XML 实例演示二:使用dom4j实现JAVA对象转XML 总结 1. 简介 XML是可扩展标记语言,能够在Web开发中扮演着非常重要的角色,它描述了文本数据的结构,并且广泛用于存储和传输数据。在JAVA开发环境下,…

    html 2023年5月30日
    00
  • Mybatis多表查询与动态SQL特性详解

    Mybatis多表查询与动态SQL特性详解 介绍 Mybatis是一款使用Java编写的持久层框架,它可以帮助程序员将Java对象和数据库表之间传输数据映射成为一种简单的配置,同时还支持很多高级特性,例如动态SQL语句和多表查询。 在本篇文章中,我们将会详细讲解Mybatis多表查询与动态SQL特性的使用方法,帮助Mybatis初学者更好地理解和掌握该框架。…

    html 2023年5月30日
    00
  • js使用递归解析xml

    以下是详细讲解“js使用递归解析xml”的完整攻略: 步骤一:获取XML数据 首先,你需要获取到一个XML的数据源。可以使用AJAX或其他的网络请求方式来获取XML数据。下面是一个使用AJAX获取XML数据的示例代码: function loadXMLDoc(filename) { let xhttp = new XMLHttpRequest(); xhtt…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部