Swift教程_CoreData实例(五)_构建控制层(添加数据)

Swift教程_CoreData实例(一)_构建storyboard

Swift教程_CoreData实例(二)_构建数据层

Swift教程_CoreData实例(三)_构建控制层(列表数据加载、删除数据)

Swift教程_CoreData实例(四)_构建控制层(查询、更新数据)

Swift教程_CoreData实例(五)_构建控制层(添加数据)

4.添加数据

我们自定义一个列表控制器PKOBookAddTableViewController,并应用到storyboard的添加显示view中,用来显示所选中的book的明细。通过点击PKOBooksTableViewController的Add按钮,跳转到PKOBookAddTableViewController页面,并通过Book对象来初始化列表。
代码如下,注释非常详细,其中包含更新数据的部分代码,请结合下一小节的代码阅读:

PKOBookAddTableViewController继承于PKOBookDetailTableViewController,如下:

[objc] view plain copy

  1. import UIKit  
  2. import CoreData  
  3.   
  4. class PKOBookAddTableViewController: PKOBookDetailTableViewController {  
  5.       
  6.     var addObjectContext: NSManagedObjectContext!  
  7.     var delegate: PKOBooksTableViewController!  
  8.       
  9.     override func viewDidLoad() {  
  10.         super.viewDidLoad()  
  11.           
  12.         //设置撤回管理器  
  13.         self.setUpundoManager()  
  14.         //初始化时既为编辑状态  
  15.         self.editing = true  
  16.     }  
  17.       
  18.     deinit{  
  19.         self.cleanUpUndoManager()  
  20.     }  
  21.       
  22.     override func didReceiveMemoryWarning() {  
  23.         super.didReceiveMemoryWarning()  
  24.     }  
  25.       
  26.     @IBAction func cancel(sender: AnyObject) {  
  27.         self.delegate!.addViewController(self, isSave: false)  
  28.     }  
  29.       
  30.     @IBAction func save(sender: AnyObject) {  
  31.         self.delegate!.addViewController(self, isSave: true)  
  32.     }  
  33.       
  34. }  

修改PKOBooksTableViewController,并添加对应addViewController方法,如下:

[objc] view plain copy

  1. //通过segue跳转前所做的工作  
  2.     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {  
  3.         //明细查询页面  
  4.         if segue.identifier == "BookDetail" {  
  5.             //将所选择的当前数据赋值给所打开页面的控制器  
  6.             var bookDetailTableViewController = segue.destinationViewController as PKOBookDetailTableViewController  
  7.             var currentRow = tableView.indexPathForSelectedRow()  
  8.             var book = self.fetchedResultsController?.objectAtIndexPath(currentRow!) as Book  
  9.             bookDetailTableViewController.book = book  
  10.         }  
  11.         else if segue.identifier == "BookAdd"{  
  12.             var navigationController = segue.destinationViewController as UINavigationController  
  13.             var bookAddTableViewController = navigationController.topViewController as PKOBookAddTableViewController  
  14.               
  15.             //这里注意要new一个NSManagedObjectContext,然后将self.fetchedResultsController?.managedObjectContext为其父context,这样我们在addView操作时就不会对self.fetchedResultsController?.managedObjectContext产生影响  
  16.             var addContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)  
  17.             addContext.parentContext = self.fetchedResultsController?.managedObjectContext  
  18.               
  19.             var newBook = NSEntityDescription.insertNewObjectForEntityForName("Book", inManagedObjectContext: addContext) as Book  
  20.             newBook.author = "Author1"//这里要初始化信息,不然为空的化swift会报错  
  21.             newBook.title = "Titel1"  
  22.             newBook.theDate = NSDate()  
  23.               
  24.             bookAddTableViewController.book = newBook  
  25.             bookAddTableViewController.addObjectContext = addContext  
  26.             bookAddTableViewController.delegate = self  
  27.         }  
  28.     }  
  29.       
  30.     // MARK: - Add controller delegate  
  31.       
  32.     func addViewController(controller:PKOBookAddTableViewController, isSave: Bool){  
  33.           
  34.         if isSave {  
  35.             NSLog("===dismissViewControllerAnimated 1===")  
  36.             var error: NSError? = nil  
  37.             if !controller.addObjectContext.save(&error) {  
  38.                 NSLog("Unresolved error \(error), \(error!.userInfo)")  
  39.                 abort()  
  40.             }  
  41.             NSLog("===dismissViewControllerAnimated 2===")  
  42.             if self.fetchedResultsController?.managedObjectContext.save(&error) == nil {  
  43.                 NSLog("Unresolved error \(error), \(error!.userInfo)")  
  44.                 abort()  
  45.             }  
  46.         }  
  47.         NSLog("===dismissViewControllerAnimated 3===")  
  48.         self.dismissViewControllerAnimated(true, completion: nil)  
  49.     }  

原文地址:http://blog.csdn.net/ooppookid/article/details/41149291

时间: 2024-10-21 14:56:01

Swift教程_CoreData实例(五)_构建控制层(添加数据)的相关文章

Swift教程_CoreData实例(四)_构建控制层(查询、更新数据)

Swift教程_CoreData实例(一)_构建storyboard Swift教程_CoreData实例(二)_构建数据层 Swift教程_CoreData实例(三)_构建控制层(列表数据加载.删除数据) Swift教程_CoreData实例(四)_构建控制层(查询.更新数据) Swift教程_CoreData实例(五)_构建控制层(添加数据) 2.查询数据 我们自定义一个列表控制器PKOBookDetailTableViewController,并应用到storyboard的明细显示view

Swift教程_CoreData实例(三)_构建控制层(列表数据加载、删除数据)

Swift教程_CoreData实例(一)_构建storyboard Swift教程_CoreData实例(二)_构建数据层 Swift教程_CoreData实例(三)_构建控制层(列表数据加载.删除数据) Swift教程_CoreData实例(四)_构建控制层(查询.更新数据) Swift教程_CoreData实例(五)_构建控制层(添加数据) 四.构建控制层 控制层总体结构包括列表的数据加载.数据的新增.删除.更新.这里我们先来搞定列表controller的功能(数据加载.删除),即PKOB

[置顶] Swift教程_CoreData实例(一)_构建storyboard

Swift教程_CoreData实例(一)_构建storyboard Swift教程_CoreData实例(二)_构建数据层 Swift教程_CoreData实例(三)_构建控制层(列表数据加载.删除数据) Swift教程_CoreData实例(四)_构建控制层(查询.更新数据) Swift教程_CoreData实例(五)_构建控制层(添加数据) 一.概述 文本用swift语言,使用coreData做一个实例,用来学习通过swift使用coreData的方法.以下是实现的效果,包含了增删改查功能

Swift教程_CoreData实例(二)_构建数据层

Swift教程_CoreData实例(一)_构建storyboard Swift教程_CoreData实例(二)_构建数据层 Swift教程_CoreData实例(三)_构建控制层(列表数据加载.删除数据) Swift教程_CoreData实例(四)_构建控制层(查询.更新数据) Swift教程_CoreData实例(五)_构建控制层(添加数据) 三.构建数据层 数据层总体结构包括由CoreData构建的数据模型.通过AppDelegate构建相应的初始化对象. coredata数据最终的存储类

Swift教程_零基础学习Swift完整实例(六)_swift完整实例(构建控制层)

4.构建控制层 本章节主要来构建个功能的控制层,为之前已经创建好的storyboard中页面的自定义controller添加对应功能. 1.TabBarViewController 该控制器按照需求通过数据层服务类PKOElementDataService所构建的实现了PKOTableDataSourceProtocol与UITableViewDataSource协议的4类数据集dataSource,并将他们赋值给tab种所展示view的控制器,即PKOElementTableViewContr

《MPLS在Cisco IOS上的配置》一1.4 MPLS控制层和数据层构件

1.4 MPLS控制层和数据层构件 MPLS在Cisco IOS上的配置 在Cisco路由器上,MPLS功能能够正常工作的前提是路由器已经开启了CEF(Cisco Express Forwarding).因此,Cisco平台实现MPLS时,需要在全局和接口下都开启CEF.请读者注意,信元模式MPLS的数据层只需要传统的ATM交换机即可,不需开启CEF.有关信元模式MPLS的讲解,详见本章后续内容.CEF是Cisco私有的数据包交换技术,可以提高路由器的转发性能. 路由器为了转发数据包,必须维护I

Swift教程_零基础学习Swift完整实例(四)_swift完整实例(搭建程序结构、构建storyboard)

四.swift重写Sample 本章开始进入正题,笔者将分搭建程序结构.构建storyboard.构建数据层.构建展示层.构建控制层.添加View的阴影.添加View的动画效果七个部分来对官方Sample的Element工程进行重写,其中涉及到的问题会给出分析和说明.不太了解storyboard的请参考官方教程<Start Developing iOS Apps Today> 1.搭建程序结构 对于程序的目录结构,完全是按照我个人的习惯所创建,由于结构对编译运行没有任何影响,是完全面向开发者的

JS控制层作圆周运动的方法_javascript技巧

本文实例讲述了JS控制层作圆周运动的方法.分享给大家供大家参考,具体如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; char

javascript控制层显示或隐藏的方法_javascript技巧

本文实例讲述了javascript控制层显示或隐藏的方法.分享给大家供大家参考.具体实现方法如下: <html> <head> <title>中国风</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <script language="JavaScript&qu