Я искал и до сих пор не могу понять, как это сделать:Swift CoreData: лучший подход для отображения конкретных данных?
У меня есть таблицаViewVC, которая показывает список (ячейки) данных, полученных из объекта CoreData: Person. В ячейке отображается только атрибут имени человека для каждого ввода данных.
Когда я нажимаю на ячейку (func didSelectRowAtIndexPath), она перейдет к detailViewVC, где я хочу показать значения остальных атрибутов, связанных с этими одиночными данными (например, возраст, пол, адрес и т. Д.).
Я изначально думал передать строковое значение имени с VC1 на VC2, а затем сделать какой-то цикл в VC2 для поиска соответствующих данных на основе атрибута name, но если имена повторяются в базе данных , это не сработает. Определенно глупо обходное решение, которое не сработает.
Итак, я собираюсь использовать уникальный идентификатор каждой записи данных, например ObjectID? Если да, то как это сделать? еще лучше и эффективнее?
Я новичок, поэтому, пожалуйста, будьте осторожны и терпеливы со мной. Благодаря!
EDIT:
VC1 имеет TableView:
import CoreData
class vc1: UIViewController, UITableViewDataSource, UITableViewDelegate {
... ... ...
var personData = [Person]()
override func viewDidAppear(animated: Bool) {
fetchAndSetResults()
medTableView.reloadData()
}
func fetchAndSetResults() {
let app = UIApplication.sharedApplication().delegate as! AppDelegate
let context = app.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Person")
do {
let results = try context.executeFetchRequest(fetchRequest)
self.personData = results as! [Person]
}
catch let err as NSError {
print(err.debugDescription)
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCellWithIdentifier("PersonCell") as? PersonCell {
let person = personData[indexPath.row]
cell.configureCell(person) //custom func that shows the string value of attribute "name" of entity "Person" on an IBOutlet label.
return cell
}
else {
return UITableViewCell()
}
}
... ...
// Tapping a cell will present VC2_DetailView.
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let indexPath = tableView.indexPathForSelectedRow;
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! PersonCell
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("VC2_DetailView") as! VC2_DetailView
// Pass person's name in the tapped cell to the label.text in VC2_DetailView.
vc.receivedPersonName = currentCell.cellPersonName.text
//vc.view.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.6)
//self.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
// Adding dispatch_async to eliminate double tapping on cell. VC2 will be presented.
dispatch_async(dispatch_get_main_queue(), {
self.presentViewController(vc, animated: true, completion: nil)
})
}
... ...
}
С этим VC2 будет представлена, когда сливают клетка. Я хочу добиться того, что VC2 покажет другие атрибуты, связанные с именем этого конкретного человека, такие как «Возраст» и «Пол» объекта «Человек» и покажет их на соответствующей метке IBOutlet в VC2.
Дополнительная информация: Таблица VC1 имеет 3 ячейки: Джон, Дженни и Джош. Когда я нажму Дженни, VC2 представит, и ее возраст и пол будут показаны. Объект «Человек» имеет 3 атрибута: «имя», «возраст» и «пол».
Я новичок, поэтому любые подробные объяснения очень ценятся!
Вы передумали проблему. Сущность содержит данные, которые вам нужны. Вам никогда не нужно ничего, как «Идентификатор объекта» или другой уникальный идентификатор. Просто используйте массив NSManagedObject, который будет содержать все, что вам нужно. Используйте силу, Люк. – RegularExpression
Я не понимаю. Человек имеет данные о людях. например. Джон, Джеймс, Дженни и т. Д. Я хочу перейти к подробному представлению, в котором показаны только детали Дженни. Не могли бы вы уточнить, пожалуйста? –
Проверьте этот пример кода, объяснив, как передать объект в detailViewController. https://developer.apple.com/library/ios/samplecode/CoreDataBooks/Introduction/Intro.html – dichen