我对使用coreData很新,并且破解了如何从单个实体保存和获取项目,但我似乎无法弄清楚如何从另一个具有“一对多”的实体中保存和获取项目关系“与第一个。我花了很多年(没有成功)尝试实施类似的问题,但更明确的解释将非常有用。
我有一个名为Group的实体,有3个属性。我的第二个实体叫做客户。
组中可能有许多客户。我发送了Group实体以在tableview中显示,一切正常。我已经编写了代码,因此当有人在tableview上点击一行时,它会将它们带到一个新的tableview,以便显示属于该组的客户。
我的实体如何设置:
extension Group {
@NSManaged var image: NSData?
@NSManaged var name: String?
@NSManaged var notes: String?
@NSManaged var roundGroupRel: NSSet?
}
extension Customer {
@NSManaged var custName: String?
@NSManaged var custJob: String?
@NSManaged var custGroupRel: RoundName?
}
我的prepareForSegue代码,我尝试将所需的信息发送到新的tableViewController,以便我可以访问该特定组的客户信息:
if segue.identifier == "custList" {
let indexPath = self.myIndexPath //the indexPath generated when the user tapped on a row
let itemController : CustomersTVC = segue.destinationViewController as! CustomersTVC
let nRound : Group = frc.objectAtIndexPath(indexPath!) as! Group
itemController.aRound = nRound
itemController.myGroupIndexPath = indexPath
}
现在,我可以执行第I组的获取请求:
import UIKit
import CoreData
class customerTVC: UITableViewController, NSFetchedResultsControllerDelegate {
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var frc : NSFetchedResultsController = NSFetchedResultsController()
var myGroupIndexPath : NSIndexPath!
var aRound : RoundName? = nil
override func viewDidLoad() {
super.viewDidLoad()
frc = getFetchedResultsController()
frc.delegate = self
do {
try frc.performFetch()
} catch {
print("Error: Failed to perform initial Fetch for Groups")
return
}
let myGroup : Group = frc.objectAtIndexPath(myRoundIndexPath!) as! Group
navigationItem.title = Group.name! + " Customers:"
}
func getFetchedResultsController() -> NSFetchedResultsController {
frc = NSFetchedResultsController(fetchRequest: roundFetchRequest(), managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
return frc
}
func roundFetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Group")
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
return fetchRequest
}
这是我需要帮助的地方。如何访问此特定组的客户,而不是实体客户中的所有条目?
如何向这些客户保存或添加其他条目?
我想我必须使用Predicate函数,但我无法确切地知道它是什么或它是如何工作的。
您的帮助将不胜感激!
答案 0 :(得分:0)
如果您向我们展示您的数据模型会更好,但我假设以下集合表示组和客户之间的关系,这些关系持有与特定组关联的所有客户。您不需要从核心数据数据库执行另一次提取。只需在此集中显示客户。
@NSManaged var roundGroupRel: NSSet?