我可以在选择时访问核心数据记录的属性,但不能访问整个记录。我想要整个事情,所以我可以将它存储为变量,然后保存另一个与此关系有关系的实体。我唯一能想到的就是用一个狭窄的谓词来触发另一次获取 - 但这不是那种方式......可以吗?
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
if (tableView == tableViewTeams) {
let currentTeam = teamResultController.objectAtIndexPath(indexPath) as Teams
forwardResultController = forwardResultControllerFunc(myQuery: currentTeam.teamName)
forwardResultController.delegate = self
forwardResultController.performFetch(nil)
defenderResultController = defenderResultControllerFunc(myTeam: currentTeam.teamName)
defenderResultController.delegate = self
defenderResultController.performFetch(nil)
tableView1.reloadData()
tableView2.reloadData()
}
//…other tableviews
}
func createPlayer() {
let playerEntityDescripition = NSEntityDescription.entityForName("Players", inManagedObjectContext: managedObjectContext!)
let player = Players(entity: playerEntityDescripition!, insertIntoManagedObjectContext: managedObjectContext)
let teamDict:NSDictionary = selectedTeam.lastObject as NSDictionary
var teamID = teamDict.objectForKey("teamName") as String
let predicate:NSPredicate = NSPredicate(format: "teamName == '\(teamID)'")!
let results:NSArray = SwiftCoreDataHelper.fetchEntities(NSStringFromClass(Teams), withPredicate: predicate, managedObjectContext: moc)
let currentTeam:Teams = results.lastObject as Teams
player.firstName = playerFirstName.text
player.lastName = playerLastName.text
player.type = playerPosition.text
player.number = playerNumber.text
player.team = currentTeam
managedObjectContext?.save(nil)
}
//one of the fetch requests
func fetchRequest(#myQuery: String, myQuery2: String, myQuery3: String) -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Players")
let sortDescriptor = NSSortDescriptor(key: "firstName", ascending: true)
let filter = NSPredicate(format: "team.teamName = %@ AND (type = %@ OR type = %@ )", "\(myQuery)", "\(myQuery2)", "\(myQuery3)")
fetchRequest.sortDescriptors = [sortDescriptor]
fetchRequest.predicate = filter
println(filter!)
return fetchRequest
}
答案 0 :(得分:1)
您的团队实体名为Teams
,复数形式。为什么?混乱。
您的实体Players
也是如此。
在您的代码中,您正在函数内部编写函数。 (didSelectRow
的括号永远不会关闭。)为什么?混乱。
如果您想在从team表中选择团队时创建一个玩家,只需确保您需要的变量位于相同的范围中。如果您有一个定义currentTeam
的方法,则在另一个方法中将无法识别。
您只需更改createPlayer()
方法即可返回播放器(将-> Player
添加到签名中并使用return player
返回播放器)并从表格选择回调中调用该方法。
var newPlayer = createPlayer()
newPlayer.team = currentTeam