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

yizhihongxing

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日

相关文章

  • 打印机打出来是乱码的三种解决办法

    让我来给你详细讲解一下“打印机打出来是乱码的三种解决办法”。 问题背景 当我们在使用打印机打印文档时,可能会遇到一种情况:打印出来的内容是乱码,无法正常阅读。这个问题通常会出现在以下情况: 使用非标准字体或编码的文档进行打印; 打印机或驱动程序的设置不正确; 硬件故障导致打印机无法正常工作。 接下来,我将为读者介绍三种常见的解决办法。 解决办法一:更换字体或…

    html 2023年5月31日
    00
  • PHP 生成的XML以FLASH获取为乱码终极解决

    为了更好地阐述如何解决“PHP 生成的XML以FLASH获取为乱码”的问题,我将采用以下步骤: 第一步:确保编码一致 确认PHP生成的XML文件以及FLASH获取数据时的编码方式一致。 在PHP文件的头部使用header函数或meta标签声明编码方式为utf-8。 header("Content-Type:text/xml;charset=utf-…

    html 2023年5月31日
    00
  • ubuntu 命令行中文乱码问题的解决方法

    当我们在 Ubuntu 命令行下使用中文时,有时会出现中文乱码问题。本文将详细介绍解决方法,包括以下几个步骤: 1. 安装中文语言包 如果我们在安装 Ubuntu 时没有选择安装中文语言包,需要手动安装中文语言包,执行以下命令: sudo apt-get update sudo apt-get install language-pack-zh-hans 2.…

    html 2023年5月31日
    00
  • 网站怎么提高网页关键词排名的方法

    以下是“网站怎么提高网页关键词排名的方法”的完整攻略: 网站怎么提高网页关键词排名的方法 网站的关键词排名对于网站的流量和曝光度有着非常重要的影响。以下是一些提高网站关键词排名的方法,以便网站管理员更好地优化网站。 方法1:优化网站内容 网站的内容是影响关键词排名的最重要因素之一。以下是一些优化网站内容的方法: 确保网站内容与关键词相关,并且内容质量高。 使…

    html 2023年5月18日
    00
  • HTML5之HTML元素扩展(上)—新增加的元素及使用概述

    HTML5是HTML语言的第五个版本,为了使得HTML能够更好地精准描述现代网页的内容和结构,增加了很多新的元素。本篇攻略主要讲解新增加的HTML元素及使用概述。 1. 新增加的元素 HTML5 新增的元素共有以下几种: 1.1 section 元素 section 元素表示文档或应用程序中的一个通用区域或部分,常用于页眉、页脚、侧边栏和文档的主要内容。 示…

    html 2023年5月30日
    00
  • 简介C#读取XML的两种方式

    针对“简介C#读取XML的两种方式”这个话题,我可以提供以下完整攻略: 简介C#读取XML的两种方式 XML是一种结构化的数据格式,可以通过c#程序进行读取和解析。下面将介绍两种使用C#读取XML的方式:使用XmlDocument和使用XDocument。 使用XmlDocument方式读取XML XmlDocument是C#中处理XML文档的一种常用方式,…

    html 2023年5月30日
    00
  • Javaweb接收表单数据并处理中文乱码

    Javaweb 接收表单数据并处理中文乱码,一般可以通过以下几个步骤来实现: 1.设置 Request 对象的编码方式 在接收表单数据之前,需要先设置 Request 对象的编码方式,一般可以使用如下代码来设置: request.setCharacterEncoding("UTF-8"); 其中 “UTF-8” 表示编码方式,这里使用 U…

    html 2023年5月31日
    00
  • cad字体乱码怎么让字体正常显示?

    针对“cad字体乱码怎么让字体正常显示”的问题,以下是详细的攻略: 问题描述 在使用CAD软件时,有时候会遇到字体显示乱码的问题,导致制图、设计等工作无法正常进行。 可能原因 字体未安装或安装不完整。 CAD软件版本与字体不兼容。 字库文件损坏或丢失。 字体本身存在问题。 解决方案 方案一:安装完整的字体库 首先,确保字体已经完整地安装在计算机中。如果未安装…

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