在DidSelect上,如何返回整个核心数据记录? (迅速)

时间:2014-10-26 11:08:29

标签: ios core-data swift

我可以在选择时访问核心数据记录的属性,但不能访问整个记录。我想要整个事情,所以我可以将它存储为变量,然后保存另一个与此关系有关系的实体。我唯一能想到的就是用一个狭窄的谓词来触发另一次获取 - 但这不是那种方式......可以吗?

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 个答案:

答案 0 :(得分:1)

您的团队实体名为Teams,复数形式。为什么?混乱。
您的实体Players也是如此。

在您的代码中,您正在函数内部编写函数。 (didSelectRow的括号永远不会关闭。)为什么?混乱。

如果您想在从team表中选择团队时创建一个玩家,只需确保您需要的变量位于相同的范围中。如果您有一个定义currentTeam的方法,则在另一个方法中将无法识别。

您只需更改createPlayer()方法即可返回播放器(将-> Player添加到签名中并使用return player返回播放器)并从表格选择回调中调用该方法。

var newPlayer = createPlayer()
newPlayer.team = currentTeam