ios开发中使用coreData来数据存储及获取
系统:mac 10.9.5 编辑器:xcode 6.1 语言:swift
新建一个single view application,将use core Data勾选。
在xcode最左侧会有一个xxx.xcdatamodeld文件,点击添加一个entity,并双击重命名为Person。然后点击添加属性,命名为name,类型选string。到此数据模型就构造好了。
以一个数组的存储为例:
拖一个tableviewcontroller视图到故事板中,并新建一个类与视图关联,在文件结构中找到cell,改写identifier为cell。在下面代码135行中同步改成cell。
然后在故事板中添加一个顶部导航,和add按钮并将按钮关联到viewcontroller中。
代码如下:
1 //
2 // TableViewController.swift
3 // 练习tableview
4 //
5 // Created by xiaos on 15-3-15.
6 // Copyright (c) 2015年 xiaos. All rights reserved.
7 //
8
9 import UIKit
10 import CoreData
11
12 class TableViewController: UITableViewController {
13
14 //添加姓名按钮
15 @IBAction func addName(sender: AnyObject) {
//以警告框的形式
16 var alert = UIAlertController(title: "添加", message:"添加一个名字", preferredStyle: UIAlertControllerStyle.Alert)
17 //保存按钮
18 let saveAction = UIAlertAction(title: "保存", style: UIAlertActionStyle.Default,handler: {(action:UIAlertAction!) -> Void in
19
20 let textField = alert.textFields![0] as UITextField
//调用下面的saveName方法
21 self.saveName(textField.text)
22 // self.tableView.reloadData()
//定义一个路径来确定插入单元格的位置 和 设置插入动画
23 let indexPath = NSIndexPath(forRow: (self.people.count-1), inSection: 0)
24 self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Left)
25
26 })
27 //取消按钮
28 let cannelAction = UIAlertAction(title: "取消", style: UIAlertActionStyle.Default,handler: nil)
29 //在alert中添加按钮
30 alert.addAction(saveAction)
31 alert.addAction(cannelAction)
32 //在alert中添加文本框
33 alert.addTextFieldWithConfigurationHandler { (textField:UITextField!) -> Void in}
34
35
36 //在视图中弹出alert
37 self.presentViewController(alert, animated: true, completion: nil)
38
39
40
41
42
43
44 }
45
46 //保存数据,分5个步骤
47 func saveName(name:String){
48
49 //1、取得总代理和托管对象内容总管
50 let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
51
52 let managedContext = appDelegate.managedObjectContext!
53
54 //2、建立一个entity
55 let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext)
56
57 let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)
58
59 //3、保存文本框中的值到person
60 person.setValue(name, forKey: "name")
61
62 //4、保存entity到托管对象总管中
63 var error:NSError?
64 if !managedContext.save(&error){
65 println("Could not save \(error),\(error?.userInfo)")
66 }
67 //5、保存到数组中,更新ui
68 people.append(person)
69 }
70
71 //姓名字典
72 73
74 //core data对象
75 var people = [NSManagedObject]()
76
77
78 override func viewDidLoad() {
79 super.viewDidLoad()
80
81 // title = "列表"
82 // Uncomment the following line to preserve selection between presentations
83 // self.clearsSelectionOnViewWillAppear = false
84
85 // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
86 // self.navigationItem.rightBarButtonItem = self.editButtonItem()
87 }
88
89 //获取数据 分3步
90 override func viewDidAppear(animated: Bool) {
91 //1、取得总代理和托管对象内容总管
92 let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
93
94 let managedContext = appDelegate.managedObjectContext!
95 //2、建立一个获取的请求
96 let fetchRequest = NSFetchRequest(entityName: "Person")
97
98 //3、执行请求
99 var error:NSError?
100
101 let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?
102
103 if let results = fetchedResults{
104 people = results
105 self.tableView.reloadData()
106 }else{
107 println("Could not save \(error),\(error?.userInfo)")
108 }
109
110 }
111
112 override func didReceiveMemoryWarning() {
113 super.didReceiveMemoryWarning()
114 // Dispose of any resources that can be recreated.
115 }
116
117 // MARK: - Table view data source
118
119 //表格部分
120 override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
121 // #warning Potentially incomplete method implementation.
122 // Return the number of sections.
123 return 1
124 }
125
126 //表格行数
127 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
128 // #warning Incomplete method implementation.
129 // Return the number of rows in the section.
130 return people.count
131 }
132
133 //cell的内容
134 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
135 let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
136
137 cell.textLabel?.text = people[indexPath.row].valueForKey("name") as String?
138
139
140 return cell
141 }
142
143
144 /*
145 // Override to support conditional editing of the table view.
146 override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
147 // Return NO if you do not want the specified item to be editable.
148 return true
149 }
150 */
151
152 /*
153 // Override to support editing the table view.
154 override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
155 if editingStyle == .Delete {
156 // Delete the row from the data source
157 tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
158 } else if editingStyle == .Insert {
159 // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
160 }
161 }
162 */
163
164 /*
165 // Override to support rearranging the table view.
166 override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
167
168 }
169 */
170
171 /*
172 // Override to support conditional rearranging of the table view.
173 override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
174 // Return NO if you do not want the item to be re-orderable.
175 return true
176 }
177 */
178
179 /*
180 // MARK: - Navigation
181
182 // In a storyboard-based application, you will often want to do a little preparation before navigation
183 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
184 // Get the new view controller using [segue destinationViewController].
185 // Pass the selected object to the new view controller.
186 }
187 */
188
189 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。