Как получить данные из определенного объекта отношения в Swift?

128
15

У меня два объекта отношений в Core Data. В первом объекте я добавляю имена компаний в атрибуте. Затем я UIViewController во второй UIViewController и добавляю другие атрибуты конкретной компании во второй объект, который является отношением к первому объекту. Также у меня есть два UITableViewControllers, первый UITableViewController показывает имена каждой компании в ячейке. Когда я выбрал конкретную компанию, я перехожу во второй UITableViewController. Я хочу, чтобы второй UITableViewController показывал данные конкретной компании, которую я выбрал. Я пробовал несколько разных методов, но я не мог сделать так, как хочу. Как я могу это сделать?

Второй код UITableViewController

override func viewDidLoad() {
super.viewDidLoad()
self.definesPresentationContext = true
println(currentCompany)

fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: "activityCompany", cacheName: nil)
fetchedResultsController.delegate = self
fetchedResultsController.performFetch(nil)
}

override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
self.tableView.reloadData()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

// MARK: - var and let
var currentCompany: String!
var managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!

// MARK: - fetchResultsController

var fetchedResultsController: NSFetchedResultsController!

func fetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Information")
var sortDescriptor = NSSortDescriptor(key: "company", ascending: true)
fetchRequest.fetchBatchSize = 50
fetchRequest.sortDescriptors = [sortDescriptor]
fetchRequest.predicate = NSPredicate(format: "company contains [c] %@", currentCompany)
return fetchRequest
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return fetchedResultsController.sections?.count ?? 0
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return fetchedResultsController.sections?[section].numberOfObjects ?? 0
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
if var dataForCell = fetchedResultsController.objectAtIndexPath(indexPath) as? Information {
cell.textLabel?.text = dataForCell.activityCompany
cell.detailTextLabel?.text = dataForCell.foundedCompany
}

return cell
}

юридические лица

import Foundation
import CoreData

@objc(Company)
class Company: NSManagedObject {

@NSManaged var nameCompany: String
@NSManaged var information: NSSet

}

import Foundation
import CoreData

@objc(Information)
class Information: NSManagedObject {

@NSManaged var activityCompany: String
@NSManaged var foundedCompany: String
@NSManaged var company: Company

}

Я сохраняю данные в следующем порядке.

// MARK: - @IBActions
@IBAction func saveData(sender: UIBarButtonItem) {
var companyEntity = NSEntityDescription.insertNewObjectForEntityForName("Company", inManagedObjectContext: managedObjectContext) as! NSManagedObject
var informationEntity = NSEntityDescription.insertNewObjectForEntityForName("Information", inManagedObjectContext: managedObjectContext) as! NSManagedObject

companyEntity.setValue(currentName, forKey: "nameCompany")

informationEntity.setValue(activityTextField.text, forKey: "activityCompany")
informationEntity.setValue(foundedTextField.text, forKey: "foundedCompany")

companyEntity.setValue(NSSet(object: informationEntity), forKey: "information")
var error: NSError?
managedObjectContext.save(&error)

var story = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
var naviController = story.instantiateViewControllerWithIdentifier("firstNavi") as! UINavigationController
presentViewController(naviController, animated: true, completion: nil)
}

спросил(а) 2015-08-23T19:36:00+03:00 5 лет, 6 месяцев назад
1
Решение
122

Я решил это.

   func fetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Information")
var sortDescriptor = NSSortDescriptor(key: "activityCompany", ascending: true)
fetchRequest.fetchBatchSize = 50
fetchRequest.sortDescriptors = [sortDescriptor]
fetchRequest.predicate = NSPredicate(format: "company.nameCompany contains [c] %@", currentCompany)
return fetchRequest
}

ответил(а) 2015-08-24T21:07:00+03:00 5 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема