私はコアデータを使用して親子関係を実装する必要があるシナリオを持っています。コアデータに親子関係を実装するにはどうすればよいですか?
シナリオは、私はチームのリストを持っています(チームはユーザー入力によって追加できます)。そして、別のテーブルビューには、ユーザー入力によって追加されたメンバーのリストがあります。
私が立ち往生しているところでは、私は2つのテーブルの間の関係を実装できませんでした。私はチームとメンバーを追加することができますが、チームを選択すると、追加したすべてのメンバーが表示されます。それは、チームを選ぶ際に、すべてのメンバーではなく関連するメンバーを表示するようなものでなければなりません。
誰でもこのシナリオの例で答えてもらえますか?それ以外の場合は、必要に応じてコーディング部分で行ったことを示すことができます。
ありがとうございます!
チームのテーブルビューコントローラ
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
はい、同じですが、最終的な部分を除いてアプローチが異なります。私はそれらに従わなければならない場合は、多くを変更する必要があります。 –
片側の注記:エンティティ名は通常単数であり(チームではなく、チームではない)、関係名は通常、送信元ではなく宛先*エンティティを示します。チームエンティティでは、メンバーとの関係は「チーム」ではなく「メンバー」と呼ばれることがあります。多くの場合、人々はそれがto-manyであることを示すために複数の関係名を使用します。メンバーからチームへの1対1の関係は、単数の「チーム」を使用します。 – pbasdf