UIPickerView和CoreData数组
问题描述:
在这里查看我的错误很困难。我将CoreData中的记录提取到Array中,并且遇到了在UIPickerView中显示所有记录的问题。我确定我错过了一些非常简单的东西,但刚开始学习Swift并寻找一些指导。UIPickerView和CoreData数组
预期结果:我有2名球员在我的读取请求和双方球员应在UIPickerView
实际结果显示:只有一个记录显示出来
代码:
import UIKit
import CoreData
class selectPlayersStatsViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, NSFetchedResultsControllerDelegate {
@IBOutlet weak var playerSelector: UIPickerView!
var moc:NSManagedObjectContext!
var playerPickerSource: [String] = [String]()
override func viewDidLoad() {
super.viewDidLoad()
playerSelector.dataSource = self
playerSelector.delegate = self
moc = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let playerIsRequest:NSFetchRequest<PlayerTable> = PlayerTable.fetchRequest()
playerIsRequest.returnsObjectsAsFaults = false
var playerArray = [PlayerTable]()
do {
playerArray = try moc.fetch(playerIsRequest)
} catch {
print(error)
}
for player in playerArray {
playerPickerSource = [player.playername!]
//print(playerPickerSource)
//print(playerPickerSource.count)
}
}
//PICKER VIEW
public func numberOfComponents(in pickerView: UIPickerView) -> Int{
return 1
}
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return playerPickerSource.count
}
public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return playerPickerSource[row]
}
public func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let playerLabel = UILabel()
let playerData = playerPickerSource[row]
let myTitleYear = NSAttributedString(string: playerData, attributes: [NSFontAttributeName:UIFont(name: "Avenir Next", size: 18.0)!,NSForegroundColorAttributeName:UIColor.black])
playerLabel.textAlignment = .center
playerLabel.attributedText = myTitleYear
return playerLabel
}
/////////
@IBAction func goViewButton(_ sender: Any) {
let myPlayer = playerPickerSource[playerSelector.selectedRow(inComponent: 0)]
//let myYear = yearPickerSource[playerSelector.selectedRow(inComponent: 0)]
print(myPlayer)
// print(myYear)
}
}
答
它似乎你正在分配一个新的数组到playerPickerSource中的每一个回合。
所以不是
for player in playerArray {
playerPickerSource = [player.playername!]
//print(playerPickerSource)
//print(playerPickerSource.count)
}
你应该尝试
for player in playerArray {
playerPickerSource.append(player.playername!)
}
我知道我累了!非常感谢你的帮助GBaeOne。 –