10.使用UITableView制作永久性存储的信息存储
2015-12-21 16:49
369 查看
在前面, 我们讲过用UITabelView存储一些简单的数据, 但并不能永久存储的, 只能作为缓存处理, 现在我们使用一个Apple提供的数据存储工具CoreData来把数据永久性的存储在本地, 当然, 这并不是真的永久保存, 一旦你把应用删掉, 数据也是会不见了的, 好了, 废话少说, 让我们来看看.
1.注意事项
在开始创建工程的时候, 我们需要勾上一个东西:
PS:如果项目一开始没有勾上,可以后期手动在AppDelegate中自行添加对应的代码
实现UITableViewDataSoucre
绑定UIBarButtonItem的点击事件
实现CoreData数据存储
处理细节
好了, 这次我们就讲到这里, 下次我们继续
1.注意事项
在开始创建工程的时候, 我们需要勾上一个东西:
PS:如果项目一开始没有勾上,可以后期手动在AppDelegate中自行添加对应的代码
2.布局界面
3.配置CoreData文件
4.实现代码
准备代码import UIKit import CoreData class ViewController: UIViewController, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! var people = [NSManagedObject]() override func viewDidLoad() { super.viewDidLoad() title = "\"The List\"" tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") } }
实现UITableViewDataSoucre
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return people.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // 1.获取UITableViewCell let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell // 2.把people对应的每一行UITableViewCell赋给person let person = people[indexPath.row] // 3.把从person里名为"name"的CoreData表里的内容赋给Cell.textLabel!.text cell.textLabel!.text = person.valueForKey("name") as? String // 4.返回Cell return cell }
绑定UIBarButtonItem的点击事件
@IBAction func addName(sender: UIBarButtonItem) { // 1.初始化一个UIAlertController, 设置它的内容以及样式 var alert = UIAlertController(title: "Sava", message: "Add a New Name", preferredStyle: .Alert) // 2.初始化UIAlertAction的参数, 以及点击之后所做的操作. let saveAtion = UIAlertAction(title: "Save", style: .Default) { (action: UIAlertAction!) -> Void in // 2.1获取UITextField里的输入内容 let textField = alert.textFields![0] as! UITextField // 2.2把获取到的UITextField内容传入到saveName的方法里 self.saveName(textField.text) // 2.3刷新当前的UITableView self.tableView.reloadData() } // 3.初始化UIAlertAction, 但在点击了之后不进行任何操作 let cancelAtion = UIAlertAction(title: "Cancel", style: .Default) { (action: UIAlertAction!) -> Void in } // 4.在UIAlertController上添加一个UITextField alert.addTextFieldWithConfigurationHandler { (textField: UITextField!) -> Void in } // 5.在UIAlertController上添加初始化好的UIAlerAtion alert.addAction(saveAtion) alert.addAction(cancelAtion) // 6.显示设置好的UIAlertController. presentViewController(alert, animated: true, completion: nil) }
实现CoreData数据存储
func saveName(name: String) { // 1.获取appDelegate let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate // 2.获取appDelegate的managedObjectContext let managedContext = appDelegate.managedObjectContext! // 3.把找到Person这个xcdatamodeld托管给获取到的managedObjectContext进行数据存储 let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext) let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext) // 4.1把外部传入的内容存储到key为"name"的表中 person.setValue(name, forKey: "name") // 5.在这里我们需要处理错误信息 var error: NSError? // 5.1如果存储失败, 就打印错误信息 if !managedContext.save(&error) { println("Could not save \(error), \(error?.userInfo)") } // 6.把内容添加到people数组中 people.append(person) }
处理细节
// 重写刚加载页面的方法 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) // 1.获取appDelegate let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate // 2.获取appdelegate的managedObjectContext委托 let managedCountext = appDelegate.managedObjectContext! // 3.获取CoreData里名为Person里的数据内容 let fetchRequest = NSFetchRequest(entityName: "Person") // 4.处理错误 var error: NSError? // 5.把从委托里拿到的Person数据以及错误信息赋给变量fetchedResults let fetchedResults = managedCountext.executeFetchRequest(fetchRequest, error: &error) as? [NSManagedObject] // 6.判断如果成立, 就把内容赋给people, 否则就打印错误信息 if let results = fetchedResults { people = results } else { println("Could not fetch \(error), \(error!.userInfo)") } }
4.最终效果
好了, 这次我们就讲到这里, 下次我们继续
相关文章推荐
- 我是运营,我没有假期
- Tomcat端口被占用解决方法(不用重启)
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- 修复mysql数据库
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- 浅析SQL Server中的执行计划缓存(上)
- MySQL数据备份之mysqldump的使用详解
- Enterprise Library for .NET Framework 2.0缓存使用实例
- 超大数据量存储常用数据库分表分库算法总结
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#实现窗体间传递数据实例
- SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它
- 给你的数据库文件减肥
- Oracle数据更改后出错的解决方法
- C#中缓存的基本用法总结
- 高并发业务接口开发思路(实战) 推荐