我有一個場景,我需要使用核心數據實現父子關係。我如何在覈心數據中實現父子關係?
在表格視圖中,我有一個團隊列表(團隊可以通過用戶輸入添加),並在另一個表格中查看通過用戶輸入添加的成員列表。
我卡在哪裏,我無法實現兩個表之間的關係。我可以添加團隊和成員,但是當我選擇一個團隊時,它會顯示我添加的所有成員。應該是,在選擇一個團隊時,它應該向與其相關的所有成員顯示相關成員。
任何人都可以用這個場景中的例子回答,否則我可以展示我在編碼部分做了什麼,如果需要的話。
在此先感謝!
隊表視圖控制器
class GroupTable: UITableViewController {
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var teamData = [Teams]()
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func viewWillAppear(animated: Bool) {
let request = NSFetchRequest(entityName: "Teams")
do{
teamData = try managedObjectContext.executeFetchRequest(request) as! [Teams]
} catch let error as NSError {
print("\(error), \(error.userInfo)")
}
self.tableView.reloadData()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if teamData.count > 0{
self.tableView.backgroundView = nil
return teamData.count
} else {
let emptyLabel = UILabel(frame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height))
emptyLabel.text = "No Teams available at the moment, create one!"
emptyLabel.textAlignment = NSTextAlignment.Center
self.tableView.backgroundView = emptyLabel
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
return 0
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("groupCell", forIndexPath: indexPath)
let teamDetails = teamData[indexPath.row]
cell.textLabel?.text = teamDetails.teamName
cell.imageView?.image = teamDetails.teamImage as? UIImage
return cell
}
}
會員表視圖控制器
class MemberTableViewController: UITableViewController {
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var memberData = [Members]()
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func viewWillAppear(animated: Bool) {
let request = NSFetchRequest(entityName: "Members")
do{
memberData = try managedObjectContext.executeFetchRequest(request) as! [Members]
} catch let error as NSError {
print("\(error), \(error.userInfo)")
}
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if memberData.count > 0{
self.tableView.backgroundView = nil
return memberData.count
} else {
let emptyLabel = UILabel(frame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height))
emptyLabel.text = "No Members in the team, add one!"
emptyLabel.textAlignment = NSTextAlignment.Center
self.tableView.backgroundView = emptyLabel
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
return 0
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("memberCell", forIndexPath: indexPath) as! ScreenThreeTableViewCell
// Configure the cell...
let memberDetails = memberData[indexPath.row]
cell.memberName?.text = memberDetails.memberName
cell.memberDesignation?.text = memberDetails.memberDesignation
cell.memberImage?.image = memberDetails.memberImage as? UIImage
return cell
}
看到[這個答案](http://stackoverflow.com/a/35792657/3985749)一個非常類似的問題。 – pbasdf
是的,它是一樣的,除了最後的部分,有不同的方法。我需要修改很多,如果我必須遵循它們。 –
一面注意:實體名稱通常是單數(例如團隊,而不是團隊),關係名稱通常表示*目標*實體,而不是來源。因此,在團隊實體中,與成員的關係可能被稱爲「成員」,而不是「團隊」。通常人們使用複數作爲關係名稱來表示它是多對多的。從成員到團隊的一對一關係將使用單數的「團隊」。 – pbasdf