swift3.0 coredata 的使用
//swift3.0在语法上有很大的改变,以简单的增删改查为例,如下:
//User类如下:
import Foundation
import CoreData
extension User {
@nonobjc public class func fetchRequest() -> NSFetchRequest<User> {
return NSFetchRequest<User>(entityName: "User");
}
@NSManaged public var address: String?
@NSManaged public var email: String?
@NSManaged public var headImg: NSData?
@NSManaged public var isLeave: Bool
@NSManaged public var name: String?
@NSManaged public var tel: String?
@NSManaged public var birthDay: String?
}
//CoreDataTools 类如下:该类用于操作coredata
import UIKit
class CoreDataTools: NSObject {
}
///CoreData操作
let EntityName = "User"
//增
func addCoreData()
{
let entity =
NSEntityDescription.insertNewObject(forEntityName:
EntityName, into:
appDelegate.managedObjectContext)
as!
User
entity.name = "周杰伦"
entity.tel ="123456789952"
do
{
try
appDelegate.managedObjectContext.save()
print("添加成功 ~ ~ ")
}catch
{
print("添加失败!!")
}
}
//删
func deleteCoreData(ConditionDic conditionDic:NSMutableDictionary)
{
let request:NSFetchRequest<NSFetchRequestResult>
= NSFetchRequest(entityName:
EntityName)
let condition = "name='周杰伦'"
let predicate =
NSPredicate(format: condition,
"")
request.predicate = predicate
do{
//查询满足条件的联系人
let resultsList =
try appDelegate.managedObjectContext.fetch(request)
as! [User]
as NSArray
if resultsList.count !=
0 {//若结果为多条,则只删除第一条,可根据你的需要做改动
appDelegate.managedObjectContext.delete(resultsList[0]
as! NSManagedObject)
try
appDelegate.managedObjectContext.save()
print("delete success ~ ~")
}else{
print("删除失败!
没有符合条件的联系人!")
}
}catch{
print("delete fail !")
}
}
//改
func updateDataWithCoreData(Model userModel:UserModel, Where condiArray:NSArray)
{
let request:NSFetchRequest<NSFetchRequestResult>
= NSFetchRequest(entityName:
EntityName)
let entity:NSEntityDescription =
NSEntityDescription.entity(forEntityName:
EntityName, in: appDelegate.managedObjectContext)!
let condition =
"name='周杰伦'"
let predicate =
NSPredicate(format: condition,"")
request.entity = entity
request.predicate = predicate
do{
let userList =
try appDelegate.managedObjectContext.fetch(request)
as! [User]
as NSArray
if userList.count !=
0 {
let user = userList[0]
as! User
user.name = "小公举"
try
appDelegate.managedObjectContext.save()
print("修改成功 ~
~")
}else{
print("修改失败,没有符合条件的联系人!")
}
}catch{
print("修改失败 ~ ~")
}
}
//查
func selectDataFromCoreData() ->
NSArray
{
var dataSource =
NSArray()
let request :
NSFetchRequest<NSFetchRequestResult> =
NSFetchRequest()
let entity:NSEntityDescription? =
NSEntityDescription.entity(forEntityName:
EntityName, in: appDelegate.managedObjectContext)
request.entity = entity
do{
dataSource = try
appDelegate.managedObjectContext.fetch(request)
as! [User]
as NSArray
print("数据读取成功 ~ ~")
}catch{
print("get_coredata_fail!")
}
return
dataSource
}
//查询所有数据并输出
func printAllDataWithCoreData()
{
let array =
getDataFromCoreData()
for item
in array {
let user = item
as! User
print("name=",user.name,"tel=",user.tel,"email=",user.email,"address=",user.address)
}
}
//注:appDelegate.managedObjectContext
为定义的全局变量,在Appdelegateclass范围外定义如下:
//let application = UIApplication.shared
//let appDelegate = application.delegate as! AppDelegate
版权声明:本文为博主原创文章,未经博主允许不得转载。
swift3.0 coredata 的使用的更多相关文章
- swift3.0 coreData的使用-日记本demo
效果 需求分析 基于官方MasterDetail模板,官方写了很多复杂的coredata逻辑,在此基础上快速开发简单的日记本程序. - 主要功能:增.删.改.查 - 界面用默认的界面,将detail页 ...
- swift3.0:CoreData的使用
一.介绍 CoreData不像slqite3那样编写代码繁琐,同时避免了使用了SQL语句的麻烦,也可以回避使用C语言的语法,降低了iOS开发的技术门槛. CoreData可降低开发成本,提高代码质量. ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- Swift3.0变化分享
Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...
- swift3.0变化总结
Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...
- 关于for循环------swift3.0
在程序开发当中,for循环使用的频率无疑是最高的.常用的swift循环是递增式遍历.当然各种循环,swift都能办到.但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码.在swift3 ...
- Swift2.3 --> Swift3.0 的变化
Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...
- Swift3.0都有哪些变化
从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行.在W ...
随机推荐
- HDU 5882 Balanced Game
Balanced Game Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 为redis分配一个新的端口
为redis分配一个8888端口,操作步骤如下:1.$REDIS_HOME/redis.conf重新复制一份,重命名为redis8888.conf.2.打开redis8888.conf配置文件,找到p ...
- (原创)LAMP教程2-安装虚拟机软件VirtualBox
大家好,今天我们讲的是第二章,安装虚拟机软件VirtualBox 我先讲一下我的电脑的环境,可以看下面的图片说明 大家也看到了我的机子是64位的win7系统(为什么讲这个,因为接下来我们要下载的是ce ...
- Period(KMP,循环节问题)
题意: 求给你个串,前i位子串由某个字符串重复k次得到,求所有的i和k 分析: i-next[i]恰好是一个循环节 #include <map> #include <set> ...
- (一)使用Blender导出GameMaker支持的模型脚本
源于YOYO论坛帖子:http://gmc.yoyogames.com/index.php?showtopic=603723 既然想做3D,那就先从模型的导入开始,具体的源文件,可以在“(二)使用等高 ...
- LeetCode题解——Regular Expression Matching
题目: 正则表达式的匹配,'.'能匹配任何一个字符,'*'之前必须有一个字符,两个结合起来表示之前那个字符出现0到无穷次. 解法: 一定要注意'*'必须结合前面的字符一起使用. 代码: class S ...
- wuzhicms内的全局函数--load_class()
load_class() 可以加载并实例化/coreframe/app/模块名/libs/class/$class.class.php类文件里的对象,如果有扩展类文件EXT_$class.class. ...
- 如何在安裝SELinux的环境执行Quartus II
(原創) 如何在安裝SELinux的環境執行Quartus II? (SOC) (Quartus II) (Linux) (RedHat) Abstract一般人安裝Linux時,也會同時安裝SELi ...
- (转)UML实践----用例图、类图、对象图、顺序图、协作图、状态图、活动图、组件图、配置图
面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...
- ASP.NET WebForm中前台代码如何绑定后台变量
转载自 http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html 经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有& ...