swift 之CoreData使用

swift 之CoreData使用,第1张

概述1、CoreData使用 创建一个swift语言项目  ,主要功能添加联系人,显示联系人列表,删除联系人。 1、创建数据模型 data Model ,此模型用来构建数据库表,映射到实体模型。 添加一个实体 add Entity. 编辑Entity 名字(对应的类名)编辑相关属性,数据类型。 、 2、创建管理对象模型 创建一个 NSManagerObject Subclass 选中对应的数据模型,选 1、CoreData使用 创建一个swift语言项目 ,主要功能添加联系人,显示联系人列表,删除联系人。
1、创建数据模型 data Model,此模型用来构建数据库表,映射到实体模型。 添加一个实体 add Entity. 编辑Entity 名字(对应的类名)编辑相关属性,数据类型。

2、创建管理对象模型 创建一个 NSManagerObject Subclass 选中对应的数据模型,选择swift语言,这样自动创建了实体类
3、CoreData 核心
CoreData 通过NSManagedobjectContext 管理对象上下文 *** 作数据库,上下文拥有持久化存储器,存储器指向数据模型(即数据库)。
创建一个类CoreDataManage用来管理获取NSManagedobjectContext、 NSPersistentStoreCoordinator、 NSManagedobjectModel 代码:
<span ></span>

import UIKit

import CoreData

class CoreDataManager: NSObject {

static let coreDataManager :CoreDataManager = CoreDataManager()

lazy var applicationdocumentsDirectory: NSURL = {

// The directory the application uses to store the Core Data store file. This code uses a directory named "com.pixolity.ios.coredata" in the application's documents Application Support directory.

let urls = NSfileManager.defaultManager().URLsForDirectory(.documentDirectory,inDomains: .UserDomainMask)

print("\(urls[urls.count-1])")

return urls[urls.count-1] as NSURL

}()

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 = NSBundle.mainBundle().URLForResource("Model",withExtension: "momd")!

return NSManagedobjectModel(contentsOfURL: modelURL)!

}()

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {

// The persistent store coordinator for the application. This implementation creates and return 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

var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedobjectModel: self.managedobjectModel)

let url = self.applicationdocumentsDirectory.URLByAppendingPathComponent("swift_demo.sqlite")

var error: NSError? = nil

var failureReason = "There was an error creating or loading the application's saved data."

do {

try coordinator!.addPersistentStoreWithType(NSsqliteStoreType,configuration: nil,URL: url,options: nil)

} catch var error1 as NSError {

error = error1

coordinator = nil

// Report any error we got.

var dict = [String: AnyObject]()

dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"

dict[NSLocalizedFailurereasonerrorKey] = failureReason

dict[NSUnderlyingErrorKey] = error

error = 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 \(error),\(error!.userInfo)")

abort()

} catch {

fatalError()

}

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

}()

// MARK: - Core Data Saving support

func saveContext () {

if managedobjectContext.hasChanges {

do {

try managedobjectContext.save()

} catch {

// Replace this implementation 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.

let nserror = error as NSError

NSLog("Unresolved error \(nserror),\(nserror.userInfo)")

abort()

}

}

}


}


<span ></span>


联系人列表: vIEwDIDLoad 获取数据:
 

overrIDe func vIEwDIDLoad() {

super.vIEwDIDLoad()


let fetchRequst = NSFetchRequest(entityname: "Person")

let ageSort = NSSortDescriptor(key: "age",ascending: true)

let nameSort = NSSortDescriptor(key: "name",ascending: true)

fetchRequst.sortDescriptors = [ageSort,nameSort]

frc = NSFetchedResultsController(fetchRequest: fetchRequst,managedobjectContext: managerObjectContext!,sectionnameKeyPath: nil,cachename: nil)

frc.delegate = self

do {

try frc.performFetch()

}catch let error as NSError{

print("performFetch error :\(error)")

}

self.tableVIEw.tableFooterVIEw = UIVIEw(frame: CGRect(x: 0,y: 0,wIDth: 0,height: 0))


}



实现 NSFetchedResultsController 代理方法
<span ></span>

func controllerWillChangeContent(controller: NSFetchedResultsController) {

self.tableVIEw.beginUpdates()

}

func controller(controller: NSFetchedResultsController,dIDChangeObject anObject: AnyObject,atIndexPath indexPath: NSIndexPath?,forChangeType type: NSFetchedResultsChangeType,newIndexPath: NSIndexPath?) {

if(type == .Delete){

self.tableVIEw.deleteRowsAtIndexPaths([indexPath!],withRowAnimation: .automatic)

}else if type == .Insert{

self.tableVIEw.insertRowsAtIndexPaths([newIndexPath!],withRowAnimation: .automatic)

}

}

func controllerDIDChangeContent(controller: NSFetchedResultsController) {

self.tableVIEw.endUpdates()

}


<span ></span>


数据源:

overrIDe func tableVIEw(tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {

// #warning Incomplete implementation,return the number of rows

let sectionInfo = frc.sections![section] as NSFetchedResultsSectionInfo

return sectionInfo.numberOfObjects

}

overrIDe func tableVIEw(tableVIEw: UItableVIEw,cellForRowAtIndexPath indexPath: NSIndexPath) -> UItableVIEwCell {

let cell = UItableVIEwCell(style: .SubTitle,reuseIDentifIEr: tableVIEwConstants.cellIDentifIEr)

let person = frc.objectAtIndexPath(indexPath) as! Person


cell.textLabel!.text = "name: \(person.name!)"

cell.detailTextLabel!.text = "Phone:\(person.phoneNum!)"

return cell

}



4、添加联系人
核心部分: 1、通过NSEntityDescription.insertNewObjectForEntityForname 方法向上下文插入一个对象。并返回新建的对象。 2、给新建的对象属性赋值 3、保存到数据库managerObjectContext.save()

func newPerson()->Bool{

let managerObjectContext = CoreDataManager.coreDataManager.managedobjectContext

let newPerson = NSEntityDescription.insertNewObjectForEntityForname("Person",inManagedobjectContext: managerObjectContext) as? Person

if let person = newPerson {

person.name = self.nameTextFIEld.text

if let phoneNum = Int(self.phoneTextfIEld.text!){

person.phoneNum = phoneNum


}

if let age = Int(self.ageTextfIEld.text!){

person.age = age

}

do{

try managerObjectContext.save()

return true

}catch let error as NSError{

print("Failed to save :\(error) ")

}

}else{

print("Failed to creat new person")

}

return false

}

总结

以上是内存溢出为你收集整理的swift 之CoreData使用全部内容,希望文章能够帮你解决swift 之CoreData使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存