繁体   English   中英

如何从Swift中的特定关系实体获取数据?

[英]How to fetch data from specific relationship entity in Swift?

我在Core Data中有两个关系实体。 在第一个实体中,我在属性中添加公司名称。 然后,我移至第二个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)
}

我解决了

   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
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM