swift语言IOS8开发战记21 Core Data2

新年到了,祝大家大家羊年快乐,喜气洋洋。上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。这一话中建立的几个变量对照上一话中讲到的coredata中重要的变量,在AppDelegate中,添加如下代码:

lazy var applicationDocumentsDirectory:NSURL = {
        let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
        return urls[urls.count - 1] as NSURL
        }() //官方比较推荐的写法

跟我们之前接触的大多数数据库访问的语句相似,这是通过一个闭包来设置url的。

  lazy var managedObjectModel: NSManagedObjectModel = {
        let modelUrl = NSBundle.mainBundle().URLForResource("Model", withExtension: "momd")
        return NSManagedObjectModel(contentsOfURL: modelUrl!)!
        }()//加载model

还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。

lazy var persistenetStoreCoordinator:NSPersistentStoreCoordinator = {
        var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
        let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("data.sqlite")
        var error: NSError? = nil
        var failureString = "Three was an error when creating or loading the application's saved data"
        if coordinator?.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil {
            coordinator = nil
            let dict = NSMutableDictionary()
            dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's save data"
            dict[NSLocalizedFailureReasonErrorKey] = failureString
            dict[NSUnderlyingErrorKey] = error
            error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
            NSLog("Unsolved error\(error), \(error.userInfo)")
            abort()//有错误直接退出
        }
        return coordinator!//没有错误就返回

        }()//持久化

上面这段代码定义了持久化的存储器和错误的处理方式

   lazy var managedObjectContext:NSManagedObjectContext = {
        let coordinator = self.persistenetStoreCoordinator
        var managedObjectContext = NSManagedObjectContext()
        managedObjectContext.persistentStoreCoordinator = coordinator
        return managedObjectContext

        }()//上下文

变量定义足够了之后我们来定义方法:

    func saveContext(){
        if let moc = self.managedObjectContext {
            var error:NSError? = nil
            if moc.hasChanges && !moc.save(&error){
             NSLog("Unsolved error\(error), \(error.userInfo)")
                abort()
            }
        }

    }

上一话中说过,如果没有调用save方法,那么我们对coredata的操作都会在内存中,而不会持久化。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。此外我们只创建一个model是不够的,需要再创建一个关联文件如下图所示:

一路点下去,后面的操作是自动关联的,生成的文件如下:

时间: 2024-10-17 20:47:21

swift语言IOS8开发战记21 Core Data2的相关文章

swift语言IOS8开发战记23 Core Data4

这后面的部分痘子的视频已经不讲了,我自己看着英文书试着给大家讲的,书名叫<Beginning IOS8 Programming with Swift>,感兴趣的同学自己搜一下哈.上一话中我们讲解了coredadta的用法,那么如何把coredata用到我们的工程中么,可以把上一话中的代码粘贴到我们工程的AppDelegate中,基本这套代码是通用的,注意有两句要修改一下,一句是: let modelURL = NSBundle.mainBundle().URLForResource("

swift语言IOS8开发战记20 Core Data1

Core Data字面意思就是核心数据,但它其实并不是一个数据库,它是一个框架,就像我们之前经常用到的Foundation一样,我们做持久化的时候,使用Core Data非常方便.下面展示的是Core Data框架的结构图: 我们来新建一个项目进行添加core data的学习. 新建一个项目,在项目中添加new file的时候可以看到专门有一个Core Data的选项 我们选择Data Model,创建,使用默认名字,现在看到工程里多出了一个Model.xcdatamodeld,点击已下按钮添加

swift语言IOS8开发战记22 Core Data3

上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功.首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc(Info),不然后面会报错,我也不知道为什么. 然后在viewController中添加代码如下代码来实现: import UIKit import CoreData class ViewController: UIViewController { var tempInfo: Info! override func viewD

Swift语言IOS8开发战记25 网络通信Get和Post方式

Get是从服务器上获取数据,Post是向服务器传送数据.对于Get方式,服务器端用Requset.QueryString获取变量的值,对于Post方式,服务器端用Request.Form获取提交的数据.Get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内个个字段一一对应,在URL中可以看到.Post是通过HTTP Post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. Get安全性非常低,Po

Swift语言IOS8开发战记27 Sketch初探

在之前我们新建了一个计算器项目,现在我想要给这个计算器项目制作一个桌面图标,可以使用Sketch,这是一款非常棒的软件.要想详细地学习这个软件请访问"Sketch中国",里面有很多专业的Demo和教材. 相对于PS这样的软件,Sketch简直就是为移动平台量身定做的. 打开Sketch,然后在右侧选择新建一个DeskTop HD,主页面有点像我们的Xcode,中间是画布,右侧是检查器. 可以使用快捷键A建立画板,你可以把画板当做图层的顶层,在上面自由发挥.然后我们使用U新建一个圆角矩形

swift语言IOS8开发战记24 解析Json

在IOS中使用NSURLConnection实现http通信,NSURLConnection提供了异步和同步两种通信方式,同步请求会造成进程阻塞,通常我们使用异步的方式,不管同步还是异步,建立通信的基本步骤都是一样的: 1,创建NSURL 2,创建Request对象 3,创建NSURLConnection连接 第3步结束后就建立了一个http连接. 这里我们用一个开放的api做例子: http://www.weather.com.cn/adat/sk/101010100.html 这是北京市的当

swift语言IOS8开发战记15 Animation Delay

前几话我们实现了Review按钮的功能,今天来实现Share按钮的功能,由于两个功能的相似性,所以新建一个控制器,ShareViewController类,把ReviewViewController类的代码复制过去进行修改,share中不需要transforView和label,删掉,然后把按钮改成四个放到基view中,代码如下: let buttonWidth:CGFloat = 60 let buttonY:CGFloat = 200 //三个按钮相同的规格 let faceBtn = UI

基于swift语言iOS8的蓝牙连接(初步)

看过一些蓝牙App的事例,大体上对蓝牙的连接过程进行了了解.但是开始真正自己写一个小的BLE程序的时候就举步维艰了.那些模棱两可的概念在头脑中瞬间就蒸发了,所以还是决定从最基本的蓝牙连接过程进行.这里所说的蓝牙是针对 bluetooth 4.0的. 第一步就是去看官方的关于蓝牙框架的文档,即Core Bluetooth Programming Guide,在苹果的官方网站上可以轻松找到,不管你对蓝牙的基本概念是否有了解,这个文件可以使你更好的对蓝牙的连接过程有个了解.这个文档的前面几张介绍了关于

Swift语言iOS开发:CALayer十则示例(转)

http://mobile.51cto.com/iphone-469498.htm 如你所知,我们在iOS应用中看到的都是视图(view),包括按钮视图.表视图.滑动条视图,还有可以容纳其他视图的父视图等. 但你或许不知道在iOS中支撑起每个视图的是一个叫做"图层(layer)"的类,确切地说是CALayer. 本文中您会了解CALayer及其工作原理,还有应用CALayer打造酷炫效果的十则示例,比如绘制矢量图形.渐变色,甚至是粒子系统. 本文要求读者熟悉iOS应用开发和Swift语