在 DidSelect 上,如何返回整个核心数据记录? (迅速)
Posted
技术标签:
【中文标题】在 DidSelect 上,如何返回整个核心数据记录? (迅速)【英文标题】:upon DidSelect, how to return whole core data record? (swift) 【发布时间】:2014-10-26 11:08:29 【问题描述】:我可以在选择时访问核心数据记录的属性,但不能访问整个记录。我想要整个东西,所以我可以将它存储为一个变量,然后保存另一个与这个有关系的实体。我能想到的唯一一件事就是用一个狭窄的谓词触发另一个 fetch - 但那不是办法..可以吗?
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
【问题讨论】:
【参考方案1】:您的团队实体称为Teams
的复数形式。为什么?令人困惑。
您的实体 Players
也是如此。
在您的代码中,您正在函数内部编写函数。 (didSelectRow
的括号永远不会关闭。)为什么?令人困惑。
如果您想在从球队表中选择球队时创建球员,只需确保您需要的变量在相同的范围内。如果您有一种定义currentTeam
的方法,则在另一种方法中将不知道该方法。
您可以简单地更改您的createPlayer()
方法以返回玩家(将-> Player
添加到签名并在末尾使用return player
返回玩家)并从表选择回调中调用它。
var newPlayer = createPlayer()
newPlayer.team = currentTeam
【讨论】:
对不起,我忘记了大括号 - 请参阅上面的编辑以获取更新。命名约定是因为我从未通过抽象层使用过数据库——无论我读过多少次实体不是表……旧习惯很难改掉。我花了很长时间让这个工作,实际上最终做了一个字符串的获取请求,然后再次搜索以将其提供给另一个函数。在创建玩家函数中,它不允许我将 player.team 定义为来自其他实体的 managedobjectwithID。 您应该接受答案。它展示了如何将团队与玩家之间的关系联系起来。 有点。我认为我真正想做的是从 DidSelect 函数中返回团队,然后将其提供给 create player 函数。不过,你在这两个方面都是对的:这是从函数中获取 NSMObjects 的方法,我应该接受答案。以上是关于在 DidSelect 上,如何返回整个核心数据记录? (迅速)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 didselect 上展开 collectionview 单元格以显示更多信息?
在 didselect 行中我的第一行返回标签文本而不是我的自定义标签文本
在 Swift 3 中使用 didSelect 和 navigationController 在没有情节提要的情况下在 TableViewControllers 之间传递数据
如何禁用为 UITableViewCell 的某些部分调用 DidSelect?