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技术站