Swift基础之CoreData的使用
以前使用过OC版本的CoreData应该很好理解Swift方式,所以这里简单的展示一下,增删改查的方法使用,同时给大家说一下创建步骤,方便大家的使用,转载请注明出处,谢谢~
步骤一:创建一个Swift的新项目,记得勾选对应的配置项,如图:
步骤二:打开****.xcdatamodeld文件,点击Add Entity,添加一个实体类,可以自己重定义类名,然后在类中添加属性,如图:
步骤三:打开AppDelegate文件,添加相关代码,注意红色的地方要改成自己项目中对应的名称
//MARK:------注意下面的四个方法需要自己添加
lazy var applicationDocumentsDirectory: URL = {
// The directory the application uses to store the Core Data store file. This code uses a directory named "me.appkitchen.cd" in the application's documents Application Support directory.
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return urls[urls.count-1]
}()
lazy var managedObjectModel: NSManagedObjectModel = {
// The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model.
let modelURL = Bundle.main.url(forResource: "SwiftCoreDataDemo", withExtension: "momd")!
return NSManagedObjectModel(contentsOf: modelURL)!
}()
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
// The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
// Create the coordinator and store
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.appendingPathComponent("OneOneEntity.sqlite")
var failureReason = "There was an error creating or loading the application's saved data."
do {
try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: nil)
} catch {
// Report any error we got.
var dict = [String: AnyObject]()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" as AnyObject?
dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject?
dict[NSUnderlyingErrorKey] = error as NSError
let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
abort()
}
return coordinator
}()
lazy var managedObjectContext: NSManagedObjectContext = {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
步骤四:开始写自己的增删该查方法
//增加数据
func saveData(textStr:String) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let manageContext = appDelegate.managedObjectContext
let entityOne = NSEntityDescription.entity(forEntityName: "OneOneEntity", in: manageContext)
let itemS = NSManagedObject.init(entity: entityOne!, insertInto: manageContext)
itemS.setValue(textStr, forKey: "textStr")
do {
try manageContext.save()
self.dataArray.append(itemS)
//print("..........\(itemS)")
} catch {
print("存储错误...")
}
}
//删除
func deleteData(aIndexPath:IndexPath) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let manageContext = appDelegate.managedObjectContext
manageContext.delete(self.dataArray[aIndexPath.row])
do {
try manageContext.save()
self.dataArray.remove(at: aIndexPath.row)
self.myTableView.reloadData()
} catch {
print("存储错误...")
}
}
//修改
func updateData(aIndxPath:IndexPath,upStr:String) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let manageContext = appDelegate.managedObjectContext
//let entityOne = NSEntityDescription.entity(forEntityName: "OneOneEntity", in: manageContext)
//创建查询请求
let fetchRequest = NSFetchRequest<NSFetchRequestResult>.init(entityName: "OneOneEntity")
//获取数据
do {
let results = try manageContext.fetch(fetchRequest)
//找到修改的数据
let oneObj:NSManagedObject = results[aIndxPath.row] as! NSManagedObject
oneObj.setValue(upStr, forKey: "textStr")
do {
try manageContext.save()
do {
let results1 = try manageContext.fetch(fetchRequest)
self.dataArray = results1 as! [NSManagedObject]
self.myTableView.reloadData()
} catch {
print("查询错误...")
}
} catch {
print("存储错误...")
}
} catch {
print("修改错误...")
}
}
//查询
func lookUpData() {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let manageContext = appDelegate.managedObjectContext
let fetchReq = NSFetchRequest<NSFetchRequestResult>(entityName: "OneOneEntity")
do {
let results = try manageContext.fetch(fetchReq)
self.dataArray = results as! [NSManagedObject]
self.myTableView.reloadData()
} catch {
print("查询错误...")
}
}
效果图:(具体代码,请自行研究,如果喜欢请点Star,源码:https://github.com/hbblzjy/SwiftCoreDataDemo)
Swift基础之CoreData的使用的更多相关文章
- swift基础:第六部分:类与对象
http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...
- swift基础:第二部分:函数和闭包
今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
- Swift基础语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...
- swift -- 基础
swift -- 基础 1.常量和变量 常量: let 变量: var 2.声明常量和变量 常量的声明: let let a = 1 //末尾可以不加分号,等号两边的空格必须对应(同 ...
- iOS Swift 模块练习/swift基础学习
SWIFT项目练习 SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图 +控件 1.UIImag ...
- Swift基础学习
Swift基础学习 http://c.biancheng.net/cpp/html/2242.html 这个网站最近看了一下,对于基本语法解释概括的相对全面,如同重新练习一遍OC似的,挺全面的,谢谢 ...
- swift基础语法(四) 函数、闭包(Closures)
//函数基本定义 func 函数名(参数名:参数类型=默认值) ->返回值类型{代码块} //无参无返回值函数 func hsmin(){ } //单参无返回值函数 func prin(st:S ...
- Swift基础语法(二)
操作符 swift中运算符基本基础于c,下面我就给大家白话白话那些被优化过的运算符们 //加号减号的妙用 var a= var b= -a//此时b=-1 var c = +b//此时 c=-1 va ...
随机推荐
- assert后面如果是假则程序崩溃
assert后面如果是假,则程序崩溃.
- Python的字典和JSON
Python的字典和JSON在表现形式上非常相似 #这是Python中的一个字典 dic = { 'str': 'this is a string', 'list': [1, 2, 'a', 'b'] ...
- Java基础详解
从写Java系列的第一篇到现在已经三个月了,因为在网络上或书籍中没有见到一些很适合初学者的学习流程,所以下决心自己写一写,也当作回顾一下Java的知识.网上有许多Java教程之类的内容,都是从概念起步 ...
- [LeetCode] Circular Array Loop 环形数组循环
You are given an array of positive and negative integers. If a number n at an index is positive, the ...
- [LeetCode] Student Attendance Record I 学生出勤记录之一
You are given a string representing an attendance record for a student. The record only contains the ...
- ios开发- 利用运行时(runtime)字典转模型
现在的ios开发中,我们通常会使用MVC模式.当我们拿到数据的时候,我们要把数据转成模型使用. 一般情况我们拿到的数据都是字典.这是我们就需要将字典转成模型对象了. 当对象的属性很少的时候,我们可以直 ...
- [UOJ 282]长度测量鸡
Description
- POJ2454 Jersey Politics
Description In the newest census of Jersey Cows and Holstein Cows, Wisconsin cows have earned three ...
- NOIP 2008 双栈排序
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
- ●2301 [HAOI2011] Problem b
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2301 题解: 莫比乌斯反演,入门题. 类似●HDU 1695 GCD 只是多了一个下界,(另 ...