【发布时间】:2015-11-15 22:04:30
【问题描述】:
我对使用 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
}
现在我可以对 Group 进行 fetch 请求:
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
}
这是我需要帮助的地方。如何访问此特定组的客户,而不是实体 Customer 中的所有条目?
我如何保存或添加另一个条目给这些客户?
我想我必须使用 Predicate 函数,但我无法确切知道它是什么或它是如何工作的。
您的帮助将不胜感激!
【问题讨论】:
标签: ios core-data swift2 one-to-many