我花了很多时间研究这个问题,并没有找到任何与此事有关的帮助,所以我希望这不是一个傻瓜的差事。我正在开发一个具有核心数据模型的应用程序,我希望用户在一个核心数据屏幕上执行搜索,并能够选择搜索结果中的哪些记录存储在表格视图中。我发现的每个教程都假设我希望核心数据中的每条记录都自动显示在表格视图中。在这一点上,我相信我拥有所有核心数据代码,并且大部分表视图代码都按照我的意愿实现。我唯一想要改变的是允许用户搜索核心数据,并选择要在表格视图中显示的记录。我在下面的第一个代码片段是表视图控制器,我必须显示核心数据,接下来的代码是我用来保存,查找和最终选择要显示的核心数据的视图控制器的代码。提前感谢您的帮助。
`import Foundation
import UIKit
import CoreData
class PatientViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate {
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController()
func getFetchedResultController() -> NSFetchedResultsController {
fetchedResultController = NSFetchedResultsController(fetchRequest: taskFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
return fetchedResultController
}
func taskFetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Patients")
let sortDescriptor = NSSortDescriptor(key: "lastname", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
return fetchRequest
}
var patients = [Patients]()
override func viewDidLoad() {
super.viewDidLoad()
fetchedResultController = getFetchedResultController()
fetchedResultController.delegate = self
fetchedResultController.performFetch(nil)
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
let numberOfSections = fetchedResultController.sections?.count
return numberOfSections!
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let numberOfRowsInSection = fetchedResultController.sections?[section].numberOfObjects
return numberOfRowsInSection!
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("MyCellTwo", forIndexPath: indexPath) as! UITableViewCell
let patient = fetchedResultController.objectAtIndexPath(indexPath) as! Patients
cell.textLabel?.text = patient.lastname + ", " + patient.firstname
return cell
}
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
let managedObject:NSManagedObject = fetchedResultController.objectAtIndexPath(indexPath) as! NSManagedObject
managedObjectContext?.deleteObject(managedObject)
managedObjectContext?.save(nil)
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.reloadData()
}
}`
第二位代码。
import UIKit
import CoreData
class AddPatientViewController: UIViewController {
@IBOutlet weak var socialSecurityNumber: UITextField!
@IBOutlet weak var lastName: UITextField!
@IBOutlet weak var firstName: UITextField!
@IBOutlet weak var middleInitial: UITextField!
@IBOutlet weak var streetAddress: UITextField!
@IBOutlet weak var apartment: UITextField!
@IBOutlet weak var city: UITextField!
@IBOutlet weak var state: UITextField!
@IBOutlet weak var zipCode: UITextField!
@IBOutlet weak var homePhone: UITextField!
@IBOutlet weak var cellPhone: UITextField!
@IBOutlet weak var workPhone: UITextField!
@IBOutlet weak var mrn: UILabel!
@IBOutlet weak var primaryDiagnosis: UITextField!
@IBAction func savePatient(sender: AnyObject) {
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var newPatient = NSEntityDescription.insertNewObjectForEntityForName("Patients", inManagedObjectContext: context) as! NSManagedObject
newPatient.setValue(firstName.text, forKey: "firstname")
newPatient.setValue(lastName.text, forKey: "lastname")
newPatient.setValue(socialSecurityNumber.text, forKey: "ssn")
newPatient.setValue(cellPhone, forKey: "cellphone")
/*newPatient.setValue(middleInitial.text, forKey: "middileinitial")
newPatient.setValue(streetAddress, forKey: "streetaddress")
newPatient.setValue(apartment, forKey: "apartment")
newPatient.setValue(city, forKey: "city")
newPatient.setValue(state, forKey: "state")
newPatient.setValue(zipCode, forKey: "zipcode")
newPatient.setValue(homePhone, forKey: "homephone")
newPatient.setValue(workPhone, forKey: "workphone")
newPatient.setValue(primaryDiagnosis, forKey: "primarydiagnosis")*/
context.save(nil)
println(newPatient)
println("Object Saved.")
}
@IBAction func findPatient(sender: AnyObject) {
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Patients")
request.returnsObjectsAsFaults = false;
request.predicate = NSPredicate(format: "lastname = %@", lastName.text)
var results:NSArray = context.executeFetchRequest(request, error: nil)!
if(results.count > 0) {
var res = results[0] as! NSManagedObject
lastName.text = res.valueForKey("lastname") as! String
firstName.text = res.valueForKey("firstname") as! String
socialSecurityNumber.text = res.valueForKey("ssn") as! String
//for res in results{
// println(res)
//}
} else {
println("0 Results Returned...Potential Error")
}
}
@IBAction func selectPatient(sender: AnyObject) {
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}