0

I have two relationship entities in Core Data. In the first entity I add names of companies in attribute. Then I move to second UIViewController and I add other attributes of specific company in the second entity which is relationship with the first entity. Also I have two UITableViewControllers, the first UITableViewController shows names of every company in cell. When I selected the specific company I move to the second UITableViewController. I want the second UITableViewController shows data of the specific company which I selected. I tried several different methods but I could not to make how I want. How can I make it?

The second UITableViewController code

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
}

Entities

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

}

I save data into entites the following method.

// 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)
}

1 Answer 1

1

I solved it.

   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
    }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.