Cell仅显示数组中的最后一个字符串

时间:2017-09-06 21:16:00

标签: swift core-data uicollectionview

我有一个对象数组,我正在尝试将数组的正确索引分配给某个单元格,如下所示。

我的阵列:

let nflTeamData: [String] = ["New England Patriots", "Miami Dolphins", "New York Jets", "Buffalo Bills", "Baltimore Ravens", "Cincinnati Bengals", "Pittsburgh Steelers", "Cleveland Browns", "Tampa Bay Buccaneers", "New Orleans Saints", "Carolina Panthers", "Atlanta Falcons", "San Francisco 49ers", "Seattle Seahawks", "Arizona Cardinals", "Los Angeles Rams"]

下面是将虚拟数据添加到CoreData的位置。我打印下面的teamName但不幸的是只得到我的数组中的最后一项(洛杉矶公羊队)来填充CollectionView中的每一行。我知道我需要以某种方式合并数组的索引路径,但不确定在collectionview委托方法之外访问它的正确方法。

//MARK: CoreData
func addDummyData() {
    let moc = DataManager.sharedInstance.persistentContainer.viewContext

    for div in nflDivision {
        let division = NSEntityDescription.insertNewObject(forEntityName: "Division", into: moc) as! Division
        print(div)
        division.name = div
        addTeams(division: division)
    }

    DataManager.sharedInstance.saveContext()
}

func addTeams(division: Division) {
    let moc = DataManager.sharedInstance.persistentContainer.viewContext

    var i = 1
    while i < 5 {
        let team = NSEntityDescription.insertNewObject(forEntityName: "Team", into: moc) as! Team

        for (index, teamName) in nflTeamData.enumerated() {
            print(index, teamName)
            team.name = "\(teamName) - \(i)"
        }

        team.id = Int64(i)
        i += 1
        division.addToTeams(team)
    }
}

//MARK: CollectionView

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! StandingsCell
    let division = divisions[indexPath.section]
    let team = division.teams?[indexPath.row] as! Team
    cell.teamLabel.text = team.name
    cell.teamLogo.image = #imageLiteral(resourceName: "nfl58")
    cell.winTextField.delegate = self
    cell.lossTextField.delegate = self
    cell.winTextField.tag = 0 //Increment accordingly
    return cell
}

override func numberOfSections(in collectionView: UICollectionView) -> Int {
    return divisions.count
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    let division = divisions[section]
    return division.teams?.count ?? 0
}

当前输出:

Controller

预期产出:

只有一个团队从上面提到的nflTeamData数组中填充一行。

编辑:我现在正试图根据下面字典中的值编号来设置numberOfRowsInSection作为可能的解决方案,但仍然会出现错误。

let nflDictionary: [String: String] = ["New England Patriots" : "1",
                                       "Miami Dolphins" : "2",
                                       "New York Jets": "3",
                                       "Buffalo Bills": "4",
                                       "Baltimore Ravens": "1",
                                       "Cincinnati Bengals": "2",
                                       "Pittsburgh Steelers": "3",
                                       "Cleveland Browns": "4",
                                       "Houston Texans": "1",
                                       "Jacksonville Jaguars" : "2",
                                       "Indianapolis Colts": "3",
                                       "Tennessee Titans": "4",
                                       "Kansas City Cheifs" : "1",
                                       "Denver Broncos": "2",
                                       "Oakland Raiders": "3",
                                       "Los Angeles Chargers": "4",
                                       "New York Giants": "1",
                                       "Philadelphia Eagles": "2",
                                       "Washington Redskins": "3",
                                       "Dallas Cowboys": "4",
                                       "Minnesota Vikings": "1",
                                       "Green Bay Packers": "2",
                                       "Detriot Lions": "3",
                                       "Chicago Bears": "4",
                                       "Tampa Bay Buccaneers": "1",
                                       "New Orleans Saints": "2",
                                       "Carolina Panthers": "3",
                                       "Atlanta Falcons": "4",
                                       "San Francisco 49ers": "1",
                                       "Seattle Seahawks": "2",
                                       "Arizona Cardinals": "3",
                                       "Los Angeles Rams": "4"
]

2 个答案:

答案 0 :(得分:0)

您似乎需要修改此方法。删除while语句并尝试更新相同的值: -

func addTeams(division: Division) {
    let moc = DataManager.sharedInstance.persistentContainer.viewContext
    for (index, teamName) in nflTeamData.enumerated() {
        let team = NSEntityDescription.insertNewObject(forEntityName: "Team", into: moc) as! Team
            print(index, teamName)
            team.name = "\(teamName) - \(index)"
            team.id = Int64(index)
            division.addToTeams(team)
        }
}

答案 1 :(得分:0)

请检查:

^M

输出:

func addDummyData() {
    let moc = DataManager.sharedInstance.persistentContainer.viewContext

    var divisionLevel = 1
    for div in nflDivision {
        let division = NSEntityDescription.insertNewObject(forEntityName: "Division", into: moc) as! Division
        print(div)
        division.name = div
        addTeams(division: division, divisionLevel: divisionLevel)
        divisionLevel = divisionLevel + 4
    }

    DataManager.sharedInstance.saveContext()
}

func addTeams(division: Division, divisionLevel: Int) {
    let moc = DataManager.sharedInstance.persistentContainer.viewContext
    var i = 1
    for var index in divisionLevel..<divisionLevel+4 {
        if nflTeamData.count >= index {
            let team = NSEntityDescription.insertNewObject(forEntityName: "Team", into: moc) as! Team
            team.name = "\(nflTeamData[index-1]) - \(i)"
            print("\(team.name)")
            team.id = Int64(i)
            division.addToTeams(team)
            i = i + 1
        }
    }
}
相关问题