使用Core Data进行数据持久化存储

 
一,Core Data介绍

  • 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成数据,也能够将保存在数据库中的数据还原成对象。
  •   2,虽然其底层也是由类似于SQL的技术来实现,但我们不需要编写任何SQL语句,有点像Java开发中的Hibernate持久化框架
  • 3,Core Data数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型。
  • 4,与SQLite区别:只能取出整个实体记录,然后分解,之后才能得到实体的某个属性。
 
二,Core Data的使用准备 - 数据模型和实体类的创建
1,创建项目的时候,勾选“Use Core Data”。完毕后在AppDelegate中,会生成相关代码。
 
2,打开项目中的xcdatamodeld文件,在右边的数据模型编辑器的底部工具栏点击Add Entity添加实体。
同时在属性栏中对实体命名进行修改,并在Attribute栏目中添加id,username,password三个属性。
 
3,点击下方的Editor Style按钮可以查看实体的关系图。
 
4,还要为每一个实体生成一个对应的NSManagedObject子类,通过类的成员属性来访问和获取数据。
新建选择Core Data项下面NSManagedObject subclass类型文件,生成该实体同名的类。
 
5,选择数据模型和实体对象,完毕后在项目列表中就可以看到创建的实体对象类。
 
 
 
6,在生成的实体类中,要添加一行代码 @objc(User) 。解决CoreData无法找到对应实体类问题
 import Foundation
 import CoreData

 @objc(User)

 class User: NSManagedObject {
     @NSManaged var password: String
     @NSManaged var username: String
     @NSManaged var id: NSNumber
 }
 

三,Core Data的使用
1,首先在代码中引入CoreData库

  import CoreData 

2,插入(保存)数据操作

 //获取管理的数据上下文 对象
 let app = UIApplication.sharedApplication().delegate as! AppDelegate
 let context = app.managedObjectContext!

 var error:NSError?

 //创建User对象
 var user = NSEntityDescription.insertNewObjectForEntityForName("User",
     inManagedObjectContext: context) as! User

 //对象赋值
 user.
 user.username = "hangge"
 user.password = "

 //保存
 if !context.save(&error){
     println("不能保存:\(error?.localizedDescription)")
 }

3,查询数据操作

 //获取管理的数据上下文 对象
 let app = UIApplication.sharedApplication().delegate as! AppDelegate
 let context = app.managedObjectContext!

 var error:NSError?

 //声明数据的请求
 var fetchRequest:NSFetchRequest = NSFetchRequest()
 fetchRequest.fetchLimit =  //限定查询结果的数量
 fetchRequest.fetchOffset =  //查询的偏移量

 //声明一个实体结构
 var entity:NSEntityDescription? = NSEntityDescription.entityForName("User",
     inManagedObjectContext: context)
 //设置数据请求的实体结构
 fetchRequest.entity = entity

 //设置查询条件
 let predicate = NSPredicate(format: "id= '1' ", "")
 fetchRequest.predicate = predicate

 //查询操作
 var fetchedObjects:[AnyObject]? = context.executeFetchRequest(fetchRequest, error: &error)

 //遍历查询的结果
 for info:User in fetchedObjects as! [User]{
     println("id=\(info.id)")
     println("username=\(info.username)")
     println("password=\(info.password)")
 }

4,修改数据操作

即将查询出来的对象进行重新赋值,然后再使用context.save方法重新保存即可

 //遍历查询的结果
 for info:User in fetchedObjects as! [User]{
     //修改密码
     info.password = "abcd"
     //重新保存
     if !context.save(&error){
         println("不能保存:\(error?.localizedDescription)")
     }
 }

5,删除数据操作

删除操作使用context.deleteObject方法,删除某个对象。然后使用context.save方法保存更新到数据库

 //遍历查询的结果
 for info:User in fetchedObjects as! [User]{
     //删除对象
     context.deleteObject(info)
 }

 //重新保存-更新到数据库
 if !context.save(&error){
     println("删除后保存:\(error?.localizedDescription)")
 }

四,数据的存放位置 

默认Core Data生成的是sqlite文件,保存在Documents文件夹下

iOS开发——数据持久化Swift篇&使用Core Data进行数据持久化存储的更多相关文章

  1. iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用

    swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...

  2. iOS开发——新特性Swift篇&Swift 2.0 异常处理

    Swift 2.0 异常处理 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主要围绕这个方面进行讨论. 如何建造异常类型? 在 i ...

  3. iOS开发——网络编程Swift篇&Alamofire详解

    Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...

  4. ios开发——实用技术总结Swift篇&swift常用开发技术总结

    swift常用开发技术总结 懒加载:属性,数组(字典),控件... 数组(懒加载): lazy var shops:Array<Dictionary<String, String>& ...

  5. iOS开发——网络编程Swift篇&(八)SwiftyJSON详解

    SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...

  6. iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画

    CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形 ...

  7. iOS开发零基础--Swift篇 元组

    元组的介绍 元组是Swift中特有的,OC中并没有相关类型 它是什么呢? 它是一种数据结构,在数学中应用广泛 类似于数组或者字典 可以用于定义一组数据 组成元组类型的数据可以称为“元素” 元组的定义 ...

  8. iOS开发——网络编程Swift篇&(七)NSURLSession详解

    NSURLSession详解 // MARK: - /* 使用NSURLSessionDataTask加载数据 */ func sessionLoadData() { //创建NSURL对象 var ...

  9. iOS开发零基础--Swift篇 循环

    循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...

随机推荐

  1. IOS UIView(UIButton)通过显示动画移动的时候 响应点击的解决方案

    今天在做一个UIButton显示动画的时候,遇到一个问题,就是在移动的时候 ,需要相应它的点击时间(click) 通过CAKeyframeAnimation 来移动UIButton的layer ,效果 ...

  2. PHP 正则表达式总结

    可以用字符作为一个通配符来代替除换行符(\n)之外的任一个字符.例如,正则表达式:.at可以与"cat"."sat"."#at"和" ...

  3. C 实现的算法篇

    算法的定义:算法是解决实际问题的一种精确的描述方法,目前,广泛认同的定义是:算法的模型分析的一组可行的确定的和有穷的规则 算法的五个特性:有穷性,确切性,输入,输出,可行性.目前算法的可执行的步骤非常 ...

  4. SVM:从理论到OpenCV实践

    (转载请注明出处:http://blog.csdn.net/zhazhiqiang/ 未经允许请勿用于商业用途)   一.理论 参考网友的博客: (1)[理论]支持向量机1: Maximum Marg ...

  5. 2016 Multi-University Training Contest 5 1012 World is Exploding 树状数组+离线化

    http://acm.hdu.edu.cn/showproblem.php?pid=5792 1012 World is Exploding 题意:选四个数,满足a<b and A[a]< ...

  6. Azure支持docker简介以及使用指南

    Docker 是一个开源的项目,主要的特点是能将应用程序包装在一个 LXC (Linux Container) 容器中,当这些应用被包装进容器后,部署.迁移都变得更为简单.与传统的虚拟化技术相比,虚拟 ...

  7. 50道经典的JAVA编程题(汇总)

    这是一次不可思议的编程历程.从2013年的最后一天开始做这份题,中间连续好几天的考试,包括java考试(今天考试的JAVA编程题),直到今天完成了.挺有成就感的...废话不多说了,来电实质性的吧. 全 ...

  8. MLE MAP EM

    1.最大似然估计 (MLE):  什么是最大似然估计?     问题:给定一组观察数据还有一个参数待定的模型,如何来估计这个未知参数呢? 观察数据(x1,y1)......(xn,yn)   待定模型 ...

  9. Selection sort

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  10. javascript函数作用域和提前声明

    一些语言如C.java都有块级作用域,即花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,但是javascript没有块级作用域.javascript使用函数作用域,即 ...