博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift教程_CoreData实例(五)_构建控制层(添加数据)
阅读量:6707 次
发布时间:2019-06-25

本文共 3129 字,大约阅读时间需要 10 分钟。

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

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

4.添加数据

我们自定义一个列表控制器PKOBookAddTableViewController,并应用到storyboard的添加显示view中,用来显示所选中的book的明细。通过点击PKOBooksTableViewController的Add按钮,跳转到PKOBookAddTableViewController页面,并通过Book对象来初始化列表。

代码如下,注释非常详细,其中包含更新数据的部分代码,请结合下一小节的代码阅读:

PKOBookAddTableViewController继承于PKOBookDetailTableViewController,如下:

[objc]   
  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, isSavefalse)  
  28.     }  
  29.       
  30.     @IBAction func save(sender: AnyObject) {  
  31.         self.delegate!.addViewController(self, isSavetrue)  
  32.     }  
  33.       
  34. }  
修改PKOBooksTableViewController,并添加对应addViewController方法,如下:
[objc]   
  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
你可能感兴趣的文章
[C#]在程序中启动另外一个程序
查看>>
支撑双十一的网络引擎:飞天洛神
查看>>
Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
查看>>
无线网络多种加密模式比拼
查看>>
浅谈Ddos******与防御
查看>>
微软开源.NET Framework,实现跨平台
查看>>
zabbix安装(超详细)
查看>>
Nginx + keepalived
查看>>
Java学习进度(2013.03.12)—Struts2学习二
查看>>
网络实验环境搭建--4.IOL/IOU桥接与抓包
查看>>
网页制作实验内容
查看>>
oracle 误删除表恢复
查看>>
zabbix安装篇之lnmp
查看>>
索引关键字的选取原则
查看>>
双机热备篇 VGMP招式详解
查看>>
用Perl在终端上打印彩色字符
查看>>
MongoDB相关操作
查看>>
暴力探测蓝牙设备工具redfang
查看>>
Learn Beautiful Soup(4)—— 一个简单抓取图书信息的例子
查看>>
ls命令(包含通配符)
查看>>