在 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?

segueing时出现核心数据错误:无法在NSManagedObject类上调用指定的初始值设定项

在选择表格单元格“didSelect”时如何将图像解析到另一个视图?